Mysql 5.6升级到5.7爬坑记

MariaDB 10.0 对应 Mysql 5.6

MariaDB 10.1 对应 Mysql 5.7

升级的正确姿势:

使用mysql_upgrade升级,参考下面的文章

【MySQL版本升级之5.6到5.7】 https://www.cnblogs.com/Bccd/p/5987426.html

前言:

调试某项目,遇到数据库兼容的问题。


查询 json_extract does not exist ,得知是mysql版本要 >5.7


项目是用宝塔运维的,有升级数据库版本的选项。直接使用,


不能登录ssh,因为米有密码。此路不通。再找,宝塔中有升级数据库的功能。先要备份(主动)数据,删数据,再升级,恢复数据。

有些服务器是1G内存下的,需要先这样操作。

打开文件:/www/server/panel/class/panelPlugin.py

然后把这行if语句注释掉,如下图


等待他的任务跑完~~~(一杯咖啡的时间)


带着期望运行,然并卵。宝塔上看,服务没有启动。手动启动~不成功。要来服务器登录账号,开始了折腾之路。


一:启动

1.1查看mysql 启动状态:

systemctl status mysqld.service

若是显示红色的failed,则是启动失败的。根据它的报错,查询问题原因:

排查了很多错误,绕来绕去,一头雾水。最后发现:

1)没有my.cof文件中指定的data文件夹不存在,手动建立。然后用以下命令初始化,mysqld --initialize --user=root --console,

2)命令报错,看来是宝塔升级了mysql但是没能更新系统的mysqld。找到安装的目录。用全路径运行试试。/www/server/mysql/bin/mysqld / --initialize --user=root --console ;命令运行成功了,查看/www/server/data文件夹,里面有一系列初始化的文件。这里就是我们的数据库存放文件的地方了。

3)将data文件夹的权限改为mysql的,chown mysql.mysql data/

4)直接用 /www/server/mysql/bin/mysqld start 启动,报错Too many arguments (first extra is 'restart');缺少指定用户的参数。改为这样启动成功: /etc/rc.d/init.d/mysqld --initialize --user=root --console

最后一句是生成的临时登录密码:A temporary password is generated for root@localhost: u(xV:Bfjz5gn

Ps:如果启动报端口占用,netstat -tunlp |grep 3306就查一下端口3306被那个占用了,kill -9 掉。

二:用户权限

2.1 MySQL 5.7之后也不再像MySQL 5.6那样默认提供一个没有密码的管理员账号root,而是生成一个临时的密码供你登录,登录后需要修改,必须修改后才能进行后续操作。

Mysql -uroot -pu(xV:Bfjz5gn //登录

2.2 使用新密码登录,新建用户,与之前备份的数据库用户/密码一致起来,防止不可知的问题发生。

修改命令:

alter user 'root'@'localhost' identified by '[yourpassword]'  

update user set password=password('7riasXrnzMXLNyBS') where user='root' and host=‘%’; //5.7不可用了

新版的mysql数据库下的user表中已经没有Password字段了,将加密后的用户密码存储于authentication_string字段。

update mysql.user set authentication_string=password('7riasXrnzLNyBS') where user='root' and Host = '%';

grant all privileges on *.* to `root`@"%" ;  //授权

flush privileges;  //刷新权限


三:数据恢复

3.1 使用修改后的的密码登录数据库,建立空的数据库,如crm

Mysql -uroot -p7riasXrnzLNyBS

>  CREATE DATABASE crm;

> quit;  //退出

导入之前备份的数据:

Mysql -uusername -ppassword [dbname] < filename.sql

参数说明:

Username,表示登录的用户名

password,表示用户的密码

dbname,表示要还原的数据库名称

如果,使用mysqldump命令,备份到filename.sql文件中,包含创建数据库的语句,则不需要指定数据库,因此,还原数据库之前,必须先创建数据库。

这种方式,只是其中的一种

还可以登录到MySQL数据库,适应source命令,还原数据库

Source filename.sql

source命令,比较简单,只需要指定导入文件的名称,以及路径即可


3.2 备份

基本命令:

mysqldump  -u username -p dbname table1 table2...->BackupName.sql;

备份crm库

mysqldump  -uroot -pcrm ->crmDB.sql;

>Enter password: ***

多个数据库:

mysqldump -u username -p --databases dbname2 dbname2 > Backup.sql

你可能感兴趣的:(Mysql 5.6升级到5.7爬坑记)