将LAMP的MySQL改成官网Binary版|Centos 7(新坑)

于 2020-08-27 发布

起因是想装gogs,但是一直报错,查github发现MySQL版本要至少5.7.7。用lnmp一键包升级脚本无法成功升级,而且从source编译实在太费劲,所以选择用官方Binary来装。

备份数据库

假设是有数据库root权限,那么用mysqldump来备份:

1
mysqldump -uroot -p --all-databases > database-bak.sql

将备份文件通过SFTP或者移到一个安全的地方,以供稍后恢复使用。

添加MySQL二进制源

首先将原来的/etc/my.cnf改名为my.cnf.bak,因为更新之后直接用这个配置文件会无法启动mysqld。

根据MySQL的官方文档,有以下步骤:

添加二进制源

首先要在https://dev.mysql.com/downloads/repo/yum/下载rpm格式的源,比如CentOS 7就是RHEL 7的社区版,所以下载这个:

放到服务器上之后,用这个命令安装:

1
yum localinstall mysql80-community-release-el7-3.noarch.rpm

启用需要的版本

首先看有哪些选项可以开/关:

1
yum repolist all | grep mysql

大概会有这样的列表:

一般是默认启用了mysql80-community,为了安全我要装mysql57-community,用下面的命令开关就好了:

1
2
yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community

这些命令运行的时候会输出一堆东西,忽略就行。完成之后检查一下:

1
yum repolist enabled | grep mysql

确认无误就可以开始下一步了。

安装MySQL

要把lnmp装的init.d脚本删掉,在/etc/init.d/mysql。

安装MySQL:

1
yum install mysql-community-server

会自动判断依赖而且装上,无脑y就是了。装完先别启动服务,编辑/etc/my.cnf,在[mysqld]添加一行skip-grant-tables,再加一行default_password_lifetime = 0,然后启动服务并检查是不是成功启动:

1
2
service mysqld start
service mysqld status

然后直接mysql进入mysql的命令行,改密码:

1
ALTER USER `root`@`localhost` IDENTIFIED BY 'new_password', `root`@`localhost` PASSWORD EXPIRE NEVER;

比起官方文档里多出来的这PASSWORD EXPIRE NEVER是为了避免莫名其妙的密码过期导致服务器爆炸,参见:https://stackoverflow.com/a/44475051。

如果提示因为开了skip-grant-tables没办法ALTER,那就改用这个命令:

1
update mysql.user set authentication_string=password('xxx') where user='root' ;

update这个命令是可选的,ALTER命令是必须要执行的。如果首先尝试alter但是报错,那就执行update命令,然后改my.cnf注释掉skip-grant-tables,重启mysqld服务,再执行alter。

恢复数据库

修改my.cnf重新打开domain socket,为了适应lnmp默认的配置,my.cnf里需要有下面几行:

1
2
3
4
5
6
[client]
port            = 3306
socket          = /tmp/mysql.sock
[mysqld]
port            = 3306
socket          = /tmp/mysql.sock

用phpmyadmin导入备份文件,还要执行mysql_upgrade -u root -p来完成数据升级。

目录