mysql复制数据库,数据库排序规则不一致问题

发布时间 2023-10-12 11:16:06作者: 06

mysql复制数据库步骤

1.导出数据库sql文件

 mysqldump 数据库名 -h  数据库地址 -P数据库端口(3306可省略) -u账号 -p密码 --add-drop-table  > /路径/sql文件名.sql

 

2.确认导出和导入数据库编码和排序规则是否一致

show global variables like '%coll%'

show global variables like '%cha%'

也可以通过navicat查看

 

这里如果检查不一致可以修改要导入的库的编码排序规则和老库保持一致

也可以修改sql文件,使需要导出的sql文件编码和排序规则和新库保持一致

 

3.检查导出的sql文件,让sql语句编码和排序规则和新库保持一致

有的时候sql文件太大,超过10G,打开文件,替换字符的方式就不太使用,本机的内存跟不上

这个时候可以采取其他方法:在linux主机上用shell命令操作

这里检查一般用3~4种排序规则检查:老库的排序规则,utf8mb4_0900_ai_ci (由于mysql8.0默认排序规则未设置,新建表会用这个),新库排序规则,可能会用到的其他排序规则(比如从其他库同步过来的表)

检查sql文件排序规则

grep -r 'utf8mb4_unicode_ci' sql文件名.sql
grep -r 'utf8mb4_bin' sql文件名.sql
grep -r 'utf8mb4_0900_ai_ci' sql文件名.sql
grep -r 'utf8mb4_general_ci' sql文件名.sql

 

我这里在sql文件里查出了

utf8mb4_bin (老库排序规则)

utf8mb4_0900_ai_ci (mysql8.0默认排序规则)

但是新库排序规则为 utf8mb4_general_ci

替换sql文件排序规则

sed -i "s|utf8mb4_bin|utf8mb4_general_ci|g" 文件名.sql
sed -i "s|utf8mb4_0900_ai_ci|utf8mb4_general_ci|g" 文件名.sql

检查是否完全替换

grep -r 'utf8mb4_unicode_ci' sql文件名.sql
grep -r 'utf8mb4_bin' sql文件名.sql
grep -r 'utf8mb4_0900_ai_ci' sql文件名.sql
grep -r 'utf8mb4_general_ci' sql文件名.sql

 

检查无误后,开始导入数据库

 

4.导入数据库

方法1:

 mysql -uroot -p db_name < db_name.tmp

方法2:

登陆mysql
mysql -uroot -p密码
#查看所有数据库
show databases;
#切换到新库
use 新库名;
#确认为空库
show tables;
#导入sql文件
source /路径/sql文件名.sql