mysql数据库的导入导出专题
导出参数(备份)
导入参数(恢复)
常用组合示例
导出单个数据库(含数据、表结构、触发器、存储过程)
mysqldump -u root -p --single-transaction --triggers -R mydatabase > backup.sql导出多个数据库(仅结构)
mysqldump -u root -p -B db1 db2 --no-data > schema_backup.sql导入备份文件到指定数据库
mysql -u root -p -D mydatabase < backup.sql导出时排除指定表
mysqldump -u root -p mydatabase --ignore-table=mydatabase.logs > backup_no_logs.sql
场景一: 适用于周末全网测试、升级前先备份主库、升级后再备份主库、周末测试恢复升级后主库、测试过程中如有调整的数据库,恢复后需要重新执行(非全量导出导入无需,重新做主备)
1、导出单个数据库 (测试完恢复的数据、单库导入无需重做主备)
/usr/local/mysql/bin/mysqldump -uroot -p \
--set-gtid-purged=OFF \
--hex-blob \
--single-transaction \
--no-create-db \
--triggers \
--routines \
--events \
--master-data=2 \
--default-character-set=utf8mb4 mall_business_v6 > mall_business_v6_20241025.sql
2、导出整个数据库(用于整个库备份、以防单个备份的有异常)
/usr/local/mysql/bin/mysqldump -uroot -p \
--set-gtid-purged=OFF \
--hex-blob \
--single-transaction \
--no-create-db \
--triggers \
--routines \
--events \
--master-data=2 \
--default-character-set=utf8mb4 nacosdb > nacosdb_20241025.sql
3、单库导入(测试完成恢复,单库数据)
time /user/local/mysql/bin/mysql -uroot -p \
-S /data/mysql/mysql3306/tmp/mysql.sock \
--default-character-set=utf8mb4 -B nacosdb < nacos_bak_202400906.sql
4、全库导入(有问题的时候使用,time可以显示导入的时间)
time /user/local/mysql/bin/mysql -uroot -p \
-S /data/mysql/mysql3306/tmp/mysql.sock < Fulldb202400906.sql
5、检查主从同步
show slave status\G
场景二: 适用于单个数据库迁移,需要从A服务器将db1,迁移到B服务器中。(可以A服务导出,在复制到A服务,如果网络互通,也可以直接B服务上直接导出)
1、在B服务上新建数据库、用户
--新创建数据库db-1:
CREATE DATABASE db1 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
--创建用户db_user:
CREATE USER 'db_user'@'%' IDENTIFIED BY 'Pnacos_20060808';
--授予nacos用户对nacos数据库的所有权限:
GRANT ALL PRIVILEGES ON DB1.* TO 'db_user'@'%';
--刷新权限:
FLUSH PRIVILEGES;
--验证创建
SHOW DATABASES;
SELECT user, host FROM mysql.user;
SHOW GRANTS FOR 'db_user'@'%';
2、导出A服务上数据库
/usr/local/mysql/bin/mysqldump -h[A_IP] -P[A-port] -uroot -p \
--set-gtid-purged=OFF \
--single-transaction \
--hex-blob \
--no-create-db \
--triggers \
--routines \
--events \
--master-data=2 \
--default-character-set=utf8mb4 db1 > db1_20250xxxx.sql
3、将A服务上导出的数据库导入到B服务中
time /usr/local/mysql/bin/mysql -uroot -p -B \
--default-character-set=utf8mb4 db1 < db1_20250xxxx.sql
4、数据校验
-- 检查表数量
SELECT COUNT(*) FROM information_schema.tables
WHERE table_schema = 'db1';-- 对比源数据库(在服务器A执行)
SELECT COUNT(*) FROM information_schema.tables
WHERE table_schema = 'db1';-- 抽样检查数据
SELECT COUNT(*) FROM db1.important_table;
5、常见错误
问题原因:是由于原数据库为打开binlog日志导致。
解决方案:去掉 --master-data=2参数重新导出。