MySQL从5.6 升级到5.7主要有2种办法,第一种逻辑导出导入(mysqldump)进行升级,第二种是直接在老库的数据文件备份基础上升级。
扩展阅读:利用innobackupex 进行MySQL从库搭建
逻辑导出导入(mysqldump)的优缺点:
优点:
- 比较适合小库升级,简单
- 适合跨越多个版本进行升级,比如从5.5到5.7
- 能够减少数据库的碎片
缺点:
- 方法测试的时候麻烦,需要对大表进行手动拆分节约升级时间,容易出错
- 对于大库(100G),升级时间耗费巨大
- 导出的时候如果选错字符集,将导致升级后数据库出现乱码
在老库的数据文件备份基础上升级
优点:
- 速度快,直接取决于备份速度,可以采用innobackup的并行备份
- 没有字符集的困恼
- 易于整库升级测试
缺点:
- 无法跨越大版本,笔者测试从5.6.20到5.7.15是没有问题, 建议事先测试。
一、逻辑导出导入(mysqldump)方法介绍
1、搭建新的环境,解压二进制文件,进行初始化,并拉起
直接指定basedir 和 datadir ./bin/mysqld --initialize-insecure --user=mysql --basedir=/app/mysql-5.7.15-linux --datadir=/app/mysql-5.7.15-linux/data 或者直接指定my.cnf 文件 ./bin/mysqld --defaults-file=my.cnf --initialize-insecure --user=mysql 启动数据库 ./bin/mysqld --defaults-file=my.cnf &
注意:这里如果用cnf文件进行初始化的时候必须将defaults-file写在最前面,否则将导致初始化到/usr/local/mysql下面和其他报错。
如果出现Can’t find messagefile '/usr/share/mysql/errmsg.sys的时候,在my.cnf 文件指定 –lc_messages_dir=/app/mysql-5.7.15-linux/share/ –lc_messages=en_US
注意新环境的端口需要和老环境不同
innodb_additional_mem_pool_size 5.7不支持
2、确定老数据库的字符集并导出
(–default-character-set --确认是数据库的字符集)
./bin/mysqldump -uroot -p --default-character-set=utf8 --triggers -R -E \ --add-drop-table --lock-all-tables --master-data=2 \ --all-databases > mysql_full_backup_$(date +%Y%m%d).sql
注意:master-data =2 是用注释的方式指定change master 的 file 和position ,在从库恢复的时候有用,如果没有开binlog需要去掉该参数
3、将数据进行导入,有两种办法:
直接导入
./bin/mysql -uroot -p -S ./mysql.sock < ./mysql_full_backup...
登入到数据库里面(推荐,方便分析)
tee /home/mysql/import.log source mysql_full_backup... notee 然后检查导入的日志。 cat /home/mysql/import.log | grep -v "Query OK" | grep -v ^$ | more
4、将MySQL进行upgrade,然后进行重启,确认后台无报错
利用mysql_upgrade进行升级,注意该处是否是全部OK ./bin/mysql_upgrade -u root -p -S ./mysql.sock --force 然后关闭数据库 ./bin/mysqladmin -u root -p shutdown 启动数据库 ./bin/mysqld_safe -defaults-file=my.cnf & 检查error日志是否有报错
5、环境变量
用软连接将mysql 连接到新的数据库 ,配置环境变量
export MYSQL_HOME=/app/mysql export MYSQL_PS1="\\u@\\h [\\d] \\r:\\m:\\s>>>" export MYSQL_UNIX_PORT=/data/mysqldata/mysql.sock #export MYSQL_PWD #export MYSQL_TCP_PORT=3306
二、在老库的数据文件备份基础上升级方法介绍
1、环境初始化步奏和逻辑导出导入方式一致,注意端口即可。
2、利用innobackup进行备份,然后进行prepare
backup: innobackupex --defaults-file=/app/mysql/my.cnf --user=root --password=myroot321 \ --use-memory=1024M --no-timestamp --backup /data/backup/full prepare: innobackupex --apply-log /data/backup/full
3、将备份文件移动到新初始化的数据库数据文件目录
4、将MySQL进行upgrade,然后进行重启,确认后台无报错
利用mysql_upgrade进行升级,注意此处是否全部OK ./bin/mysql_upgrade -u root -p -S ./mysql.sock --force 然后关闭数据库 ./bin/mysqladmin -u root -p shutdown 启动数据库 ./bin/mysqld_safe -defaults-file=my.cnf & 检查error日志是否有报错
5、环境变量,和逻辑导出导入一致