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_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.sql
方法2:
#登陆mysql
mysql -uroot -p密码
#查看所有数据库
show databases;
#切换到新库
use 新库名;
#确认为空库
show tables;
#导入sql文件
source /路径/sql文件名.sql