Linux中_mysql_mariadb不同版本之间_的数据迁移_笔记
转载注明来源: 本文链接 来自osnosn的博客,写于 2022-03-11.
起因
要更换服务器,里头的数据库,就要迁移。
原来用的是 mariadb-5.5 ,新服务器装的是 mariadb-10.5
做法
- 不同版本的 mariaDB 中 系统库
mysql
里头的表结构是不同的。
所以用户,和用户权限的迁移,就不能简单的 导出 再 导入。 - 其他的用户数据库,就比较简单。用 mysqldump 导出,再导入到新系统的 mariaDB 中就行了。
参考
笔记
- 以下笔记,仅针对用户数量不多,用户库也不多的做法。
如果用户数多,用户库也多,可以编写脚本去实现。 - 新服务器中安装新版的 mariaDB-10.5
- 新服务器中, 执行
mariadb-secure-installation
提高安全性。 - 修改 /etc/mysql/ 中的一些配置,优化。
- 比如在 /etc/mysql/mariadb.conf.d/50-server.cnf 的 [mysqld] 中加入
innodb_file_per_table = 1
mariaDB-10.5 默认是开启的,show variables like '%per_table%';
可以看到。 - 在 [mysqld] 中加入
character-set-server=utf8
设置缺省字符集。
用show variables like '%character%';
可以看到。- 如果 character-set-database 还是 Latin1,考虑删光所有数据重建。
service mariadb stop; cd /var/lib/mysql/; rm -rf *; service mariadb start; mariadb-secure-installation;`
- 如果 character-set-database 还是 Latin1,考虑删光所有数据重建。
- 比如在 /etc/mysql/mariadb.conf.d/50-server.cnf 的 [mysqld] 中加入
- 重启 mariaDB 激活新的配置。
- 手工导入用户,用户权限。
- 在旧的mariaDB中执行
select user,host from mysql.user;
列出所有用户名。 - 在旧的mariaDB中对每一个用户,执行
show grants for xxx@localhost;
- 把
show grants
输出的内容,copy到新服务器中的 mariaDB 中执行。- 例如
GRANT USAGE ON *.* TO 'xxx'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxx';
GRANT SELECT, INSERT, UPDATE, DELETE ON `myxxx`.* TO 'xxx'@'localhost';
- 如果写错了,可以用下面这句取消。
REVOKE SELECT, INSERT, UPDATE, DELETE ON `myxxx`.* FROM 'xxx'@'localhost';
- 例如
- 最后,在新数据库中执行
flush privileges;
确保所有用户权限被刷新。
- 在旧的mariaDB中执行
- 导入用户数据库
- 在旧系统中执行
mysqldump -u xxx -p --databases mydbname | gzip > mydbname.sql.gz
导出。 - 如果dump时没有带 --databases 参数,则要事先在新系统中创建对应的用户数据库,
create database mydbname;
再导入。 - 在新系统中执行
zcat mydbname.sql.gz | mysql -u xxx -p mydbname
导入。
- 在旧系统中执行
转载注明来源: 本文链接 https://www.cnblogs.com/osnosn/p/15994979.html
来自 osnosn的博客 https://www.cnblogs.com/osnosn/ .