1.思路:
小版本的升级替换思路,一种是直接删除原本在系统上的mysql程序,但是要保留/etc/my.cnf(或其他指定的配置路径如:/etc/mysql/my.cnf),还有最重要的就是data目录,这个目录包含着mysql的初始化的一些数据还有数据库数据,保留了数据,那么更新后不需要重新导入数据,不需要执行initialize操作。第二种思路就是逻辑备份,首先使用mysqldump导出数据库文件,然后删除所以mysql相关文件以及程序,当然配置文件是需要备份的(说到备份,必然是操作前所有的东西都已经做好了相关的备份,以防止删库跑路的尴尬),最后进行数据恢复。
注意:mysql大版本的升级是不能这样的,会造成一些问题,并且mysql官方也是表明了,版本的升级与降级,低版本可以升级到可升级的中间版本然后再升级到高版本。意思很明显,就是需要一步步更新,那么这种繁琐的更新肯定是适合哪种业务复杂或者是陈年老酒没办法才这么干,要不然,肯定是还是逻辑备份省事。官方推荐升级方式:https://dev.mysql.com/doc/refman/8.0/en/upgrading.html (5.7: https://dev.mysql.com/doc/refman/8.0/en/upgrading.html )。
2.备份方式:
全备份:mysqldump --all-databases --single-transaction --user=xxx -p > x.sql
增量备份:mysqldump --all-databases --single-transaction --flush-logs --user=xxx -p > x.sql
注意:--single-transaction 是对具有事务引擎的表如innodb,对于非事务的MyISAM的不起作用。--flush-logs的增量备份的恢复需要依靠binlog。
3.暴力升级方式:(删除mysql程序,只留下配置文件与data目录的数据)
升级之前的启动日志:2020-12-11T09:19:32.153747Z 0 [System] [MY-013169] [Server] /mysql-files/bin/mysqld (mysqld 8.0.12) initializing of server in progress as process 125
2020-12-11T09:19:35.264450Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: E=&ty(9:
2020-12-11T09:19:36.801017Z 0 [System] [MY-013170] [Server] /mysql-files/bin/mysqld (mysqld 8.0.12) initializing of server has completed
2020-12-14T01:31:19.605541Z 0 [System] [MY-010116] [Server] /mysql-files/bin/mysqld (mysqld 8.0.12) starting as process 175
2020-12-14T01:31:20.408045Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2020-12-14T01:31:20.439742Z 0 [System] [MY-010931] [Server] /mysql-files/bin/mysqld: ready for connections. Version: '8.0.12' socket: '/tmp/mysql.sock' port: 3306 MySQL Community Server - GPL.
2020-12-14T02:12:00.670471Z 0 [System] [MY-013169] [Server] /mysql-files/bin/mysqld (mysqld 8.0.12) initializing of server in progress as process 381
进入控制修改用户密码: alter user root@localhost identified by 'root';
干掉mysql进程,删掉所以的文件,只留下data目录,与配置文件。重新安装,新版本,然后指定好配置文件与data目录,直接启动。
2020-12-14T03:10:06.487435Z 0 [System] [MY-010910] [Server] /mysql-files/bin/mysqld: Shutdown complete (mysqld 8.0.12) MySQL Community Server - GPL.
2020-12-14T03:41:09.504455Z 0 [System] [MY-010116] [Server] /mysql-files2/bin/mysqld (mysqld 8.0.20) starting as process 1118
2020-12-14T03:41:09.538566Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2020-12-14T03:41:09.751460Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2020-12-14T03:41:09.772604Z 1 [System] [MY-011090] [Server] Data dictionary upgrading from version '80012' to '80017'.
2020-12-14T03:41:10.455284Z 1 [System] [MY-013413] [Server] Data dictionary upgrade from version '80012' to '80017' completed.
2020-12-14T03:41:10.640993Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/tmp/mysqlx.sock' bind-address: '::' port: 33060
2020-12-14T03:41:12.003175Z 4 [System] [MY-013381] [Server] Server upgrade from '80012' to '80020' started.
2020-12-14T03:41:17.011161Z 4 [System] [MY-013381] [Server] Server upgrade from '80012' to '80020' completed.
2020-12-14T03:41:17.128662Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2020-12-14T03:41:17.165420Z 0 [System] [MY-010931] [Server] /mysql-files2/bin/mysqld: ready for connections. Version: '8.0.20' socket: '/tmp/mysql.sock' port: 3306 MySQL Community Server - GPL.
从日志上可以看出来为什么官方说升级要小版本升级到中间版本再升级到高版本,如5.6->5.7->8.0。升级会有一个叫做数据字典的升级,与server的升级。具体的版本升级请见官方文档。