在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分