在Linux中安装MySQL的过程,相比较CentOS7和MySql5.7之前的版本还是有点不同的,有些命令也是发生了变化,MySQL安装初始化后的密码也不是空,直接mysql -uroot -p 然后两下回车也是登录不进去的(ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)),而是要采用数据库自动生成的临时密码登录。 
	
	        下面记录一下过程,设计到报错的部分,描述会比较混乱。当时的内心也是混乱的。 
	
	1 下载MySQL源安装包 
	2  安装MySQL源 
	        yum localinstall mysql57-community-release-el7-8.noarch.rpm 
	3 检查MySQL源是否安装成功 
	        yum repolist enabled | grep "mysql.*-community.*" 
	
 
	        如图所示表示mysql源安装成功 
	4 可改变默认的MySQL安装版本 
	        vim /etc/yum.repos.d/mysql-community.repo源,改变默认安装的mysql版本, 
	        其中enabled=1 表示优先安装。 
	        默认安装5.7。 
	5 开始安装MySQL 
	        yum install mysql-community-server 
	6 启动MySQL服务 
	        systemctl start mysqld 
	        查看启动状态 systemctl status mysqld 
	7 设置开机启动 
	        shell> systemctl enable mysqld 
	        shell> systemctl daemon-reload 
	
	以上是正常通过yum在CentOS7 64位下安装MySQL5.7的过程 
	
 
	----------------------------------------------------------------- 
	----------实际安装过程中的出错处理----------
	----------------------------------------------------------------- 
	
 
	cat /etc/my.cnf 
	datadir=/var/lib/mysql 
	#数据库数据保存目录 把这个当成安装目录(接下来的操作都是针对这个目录/var/lib/mysql) 
	socket=/var/lib/mysql/mysql.sock 
	ls -la 
	查看所有者 su 切换 
	http://blog.csdn.net/u012465296/article/details/71157286 
	sudo rm  ib_logfile0、ib_logfile1 
	注:以上4行内容其实无意义的,可以直接看问题8>处理过程 
	
	查看日志 
	sudo cat /var/log/mysqld.log 
	
	1> 错误: 
	If the mysqld execution user is authorized, page cleaner thread priority can be changed. [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable 
	解决: 
	cd /var/lib/mysql 
	ls -la 
	chmod 777 ibdata1 
	
	2 错误: 
	        ./ib_logfile0 can't be opened in read-write mode. 
	解决 
	        chown -R mysql:mysql /var/lib/mysql 
	
	3> 问题: 
	        数据库启动提示default-character-set错误 
	解决: 
	        在数据库安装之后设置了字符集配置 
	        vim /etc/my.cnf 
	        在 [mysqld]节点上手动添加 
	        default-character-set=utf8 
	        character-set-server=utf8 
	        但是default-character-set=utf8 在 CentOS 7 上启动会有错误,加#注释 
	
	4> 错误: 
	        Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist 
	解决: 
	        mysqld --initialize 
	
	5> 错误: 
	        mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists) 
	解决 
	        rm -rf /var/lib/mysql 
	
	6> 错误: 
	        –initialize specified but the data directory has files in it. Aborting. 
	解决: 
	cd /var/lib/ 
	mv mysql mysql.bak 
	#systemctl restart mysqld 
	rm mysql.bak/ -rf 
	
 
	----------------------------22:53 2017/10/21--------------------------------- 
	
 
	----------------------------12:00 2017/10/22--------------------------------- 
	
 
	查看mysql 安装目录 
	ps -ef | grep -i mysql 
	
	0 /usr/sbin/mysqld --daemonize --pid-file=/var/run/m      ysqld/mysqld.pid 
	
	得出MySQL安装目录 /usr/sbin/ 
	
	cd /usr/sbin/ 
	mysqld_safe --skip-grant-tables >/dev/null 2>&1 & (新版无此命令) 
	或者 
	mysqld_safe --skip-grant-tables & (新版无此命令) 
	或者 
	su root 
	sudo service mysqld restart 
	mysqld --skip-grant-tables 
	
	7> 问题: 
	        mysqld --skip-grant-tables 
	        mysqld --skip-grant-tables --user=root 没有反应 
	报错 
	        Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root! 
	解决 
	    ./mysqld --initialize 
	
	8> 问题: 
	        --initialize specified but the data directory has files in it. Aborting. 
	解决 
	sudo service mysqld stop  #否则/var/lib/mysql 文件夹会自动生成!!! 
	cd /var/lib/ 
	mv mysql mysql.bak 
	mysql_install_db --datadir=/var/lib/mysql 
	mysqld --initialize  #新推荐的方法 暂时跳过 
	chown mysql:mysql /var/lib/mysql -R 
	systemctl start mysqld.service 
	#chown mysql.mysql /var/run/mysqld/ 此条未确定实际作用 
	依然报错 
	查看日志 
	cat /var/log/mysqld.log 
	改权限 
	cd /var/lib/mysql 
	chown mysql.mysql -R * 
	service mysqld start 
	
	MySQL初始化后root的密码并不是空 
	另外据说MySQL对启动数据库的用户身份也有要求,不建议是root 
	查看是否生成的临时密码 
	grep 'temporary password' /var/log/mysqld.log 
	
 
	查看最新密码 
	cat /root/.mysql_secret 
	临时密码:qbb+#e*ZJoy# 
	mysql -uroot -p 
	登录成功 
	
	9> 问题: 
	        查看目前mysql的用户 
	        select user,host,authentication_string from mysql.user; 
	        提示需要先修改默认密码 
	解决: 
	set password for root@localhost=password('root');  //不是1旁边的引号 
	flush privileges;   //刷新使生效(关键) 
	
	10> 问题: 
	insert into mysql.user(Host,User,authentication_string) values("localhost","admin",password("admin")); 
	       出现 Field 'ssl_cipher' doesn't have a default value 
	解决: 
	CREATE DATABASE `mmall` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 
	//这里又是1旁边的引号 
	本地用于赋予所有权限 
	grant all privileges on mmall.* to admin@localhost identified by 'admin'; 
	flush privileges;  //刷新使生效(关键) 
	
	11> 问题: 
	        在window环境下使用Navicat连接数据库失败 
	解决: 
	        给账号开通外网访问权限 
	        grant all privileges on mmall.* to admin@'%' identified by 'admin'; 
	        依然连接不上(要使用admin账号) 
	 systemctl stop firewalld.service 
	 再次连接,发现连接成功,说明是防火墙的问题 
	 重启防火墙 
	 sudo vi /etc/sysconfig/iptables 
	 添加3306端口 
	        -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT 
	        重启防火墙 sudo service iptables restart 
	        再次连接,连接成功(要使用admin账号)
 
	特别注意: 
	        1> 阿里云服务器ECS开通时可能默认开通了安全组(阿里云控制台中设置),安全组中需要设置对外网开通指定端口访问. 
	        2> 新版mysql.user表中的password改成authentication_string 
	基本命令: 
	        1> 启动 sudo service mysqld start  centOS7: /bin/systemctl start mysqld.service 
	        2> 关闭 sudo service mysqld stop 
	   3> 重启 sudo service mysqld restart (使用这个来启动,避免错误) 
	        4> 登录/远程登录 mysql -uusername -h xxxhost -P 3306 -ppassword 
	
	从入坑到见到光明,历时超过10个小时。 
	E-mail:dev@jiangjiesheng.cn  
	江节胜 总结于 2017年10月22日 14时42分