暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql8 mysqldump

原创 huayumicheng 2022-12-12
940

1、创建备份用户

create user backup@'%' identified with mysql_native_password by '123456';
grant select,reload,process,lock tables,replication client,replication_slave_admin,show view,show_routine,trigger,event,file on *.* to backup@'%';
flush privileges;


select:			备份表数据
show view:   	备份试图
trigger:        备份触发器
lock tables:    没有使用--single-transaction
process:		没有使用 --no-tablespaces
reload:		备份前刷新mysql日志文件
super、replication_client:使用--master-data记录点位信息,需要执行show master status
super、replication_slave_admin: 使用了--dump-slave (要执行 stop slave sql_thread)
show_routine:     备份存储过程#8.0.20 新增
event: event事件
file:   导出文本文件

2、备分举例及参数注释

--只备份表结构
mysqldump -ubackup -p123456 -h192.168.100.81 -P3306 --set-gtid-purged=OFF --databases mydb --no-data >mydb_desc_`date +%Y%m%d`.sql


--只备份表结构,不生成drop table,以免误操作
mysqldump -ubackup -p123456 -h192.168.100.81 -P3306 --set-gtid-purged=OFF --skip-add-drop-table --databases mydb --no-data >mydb_desc_`date +%Y%m%d`.sql

--只备份数据
mysqldump -ubackup -p123456 -h192.168.100.81 -P3306 -q --set-gtid-purged=OFF --databases mydb --no-create-info >mydb_data_`date +%Y%m%d`.sql


--将某个表导出为insert语句
mysqldump -ubackup -p123456 -h192.168.100.81 -P3306 --set-gtid-purged=OFF --no-create-info --complete-insert --skip-extended-insert  mydb t1 >mydb_t1_`date +%Y%m%d`.sql

--备份某个数据库的多张表
mysqldump -ubackup -p123456 -h192.168.100.81 -P3306 --set-gtid-purged=OFF -q --single-transaction --hex-blob --triggers --routines --events mydb  t1 t2 t3 >mydb_`date +%Y%m%d`.sql

--备份某个数据库
mysqldump -ubackup -p123456 -h192.168.100.81 -P3306 --set-gtid-purged=OFF  -q --single-transaction  --hex-blob --triggers --routines --events --databases  test >test_`date +%Y%m%d`.sql

********************************************
--新建测试库
mysql> create database test;
mysql> use test
mysql> create table t1 (id bigint not null auto_increment primary key,row_create_time datetime default current_timestamp,row_lastupdate_time datetime default current_timestamp) engine=innodb default charset=utf8mb4 collate = utf8mb4_bin;
mysql> insert into t1 (id) select null;
mysql> insert into t1 (id) select null;

--查看备份test数据库信息
[root@mysql1 ~]# egrep -v '^$|^--|^/' test_20221211.sql 
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `test`;
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `row_create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `row_lastupdate_time` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
LOCK TABLES `t1` WRITE;
INSERT INTO `t1` VALUES (1,'2022-12-11 20:31:24','2022-12-11 20:31:24'),(2,'2022-12-11 20:31:25','2022-12-11 20:31:25');
UNLOCK TABLES;


********************************************

--备份所有数据库,8.0.23之后使用--source-data=2,之前使用--master-data=2
mysqldump -ubackup -p123456 -h192.168.100.82 -P3306 -q --single-transaction --set-gtid-purged=on --all-databases --hex-blob --triggers --routines --events --source-data=2 >alldata_`date +%Y%m%d`.sql 


--备份数据库排除某张表
mysqldump -ubackup -p123456 -h192.168.100.81 -P3306 --set-gtid-purged=OFF  -q --single-transaction   --hex-blob --triggers --routines --events  --databases mydb  --ignore-table=mydb.t1  --ignore-table=mydb.t2  >mydb_`date +%Y%m%d`.sql 


--备份多个数据库
mysqldump -ubackup -p123456 -h192.168.100.81 -P3306 --set-gtid-purged=OFF  -q --single-transaction  --hex-blob --triggers --routines --events --databases  mydb1 mydb2 mydb3  >mydb1_2_3_`date +%Y%m%d`.sql 

----hex-blob

使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用该选项。影响到的字段类型有BINARY、VARBINARY、BLOB--where条件备份

mysqldump -ubackup -p123456 -h192.168.100.81 -P3306 --set-gtid-purged=OFF  -q --single-transaction --no-create-info --complete-insert --skip-extended-insert  mydb t1  --where="id=1"  >mydb_t1_`date +%Y%m%d`.sql 


********************************************
[root@mysql2 ~]# egrep -v '^--|^/|^$' mydb_t1_20221211.sql 
LOCK TABLES `t1` WRITE;
INSERT INTO `t1` (`id`, `row_create_time`, `row_lastupdate_time`) VALUES (1,'2022-12-09 22:29:00','2022-12-09 22:29:00');
UNLOCK TABLES;

********************************************


-u: 指定连接mysql的用户名 -p: 指定连接mysql的密码 -h: 指定mysql服务器地址 -P: 指定mysql端口 --databases: 指定备份的数据库 --no-data: 只备份标结构,不备份数据 --no-create-info: 只备份数据,不备份标结构 --skip-add-drop-table:不添加drop table语句 -q: 不要缓冲查询,直接转储到stdout,大数据量加速备份 --single-transaction: 将事务隔离级别设置为RR,并在备份数据之前向服务器发送SQL语句,显示开启一个事务快照 --hex-blob: 备份 BINARY, VARBINARY, BLOB 以十六进制导出 --triggers: 备份trigger --routines:备份存储过程 --events: 导出数据库内的计划事件(定时任务) --ignore-table=mydb.t1: 备份数据库的时候忽略某张表 --where: where条件备份 --flush-logs Flush logs file in server before starting dump

--dump-replica=2|--dump-slave=2: 在从库做一个完整备份,用于主库的新从库 --apply-replica-statements: 在备份文件中增加:开头:stop slave; 末尾:start slave; --include-source-host-port:记录MASTER_HOST,MASTER_PORT ******************************************** mysqldump -ubackup -p123456 -h192.168.100.83 -P3306 -q --single-transaction --set-gtid-purged=on --all-databases --hex-blob --triggers --routines --events --dump-replica=2 --include-source-host-port >alldata_`date +%Y%m%d`.sql ******************************************** --set-gtid-purged=OFF: 备份部分数据是需要设置,导入主库时需要设置,不会在备份文件中记录SET @@GLOBAL.GTID_PURGED的值,不需要reset master可直接导入 --set-gtid-purged=ON: 全库备份需要设置 --set-gtid-purged=AUTO: 默认是auto模式 --set-gtid-purged=commented: commented模式,开启gtid模式,如果gtid_purged不为空,在备份内容中以注释的形式增加 SET @@GLOBAL.GTID_PURGED,同时在备份内容中增加SET @@SESSION.SQL_LOG_BIN= 0; ******************************************** SET @@SESSION.SQL_LOG_BIN= 0; /* SET @@GLOBAL.GTID_PURGED='+0ea02cd8-787f-11ed-9873-000c29c85cd0:1-19';*/ ******************************************** ----set-gtid-purged 参数设置对SQL_LOG_BIN=0的影响 --set-gtid-purged=OFF: SET @@SESSION.SQL_LOG_BIN=0; is not added to the output. --set-gtid-purged=ON: SET @@SESSION.SQL_LOG_BIN=0; is added to the output. --set-gtid-purged=AUTO: SET @@SESSION.SQL_LOG_BIN=0; is added to the output if GTIDs are enabled on the server you are backing up (that is, if AUTO evaluates to ON). --set-gtid-purged=commented SET @@SESSION.SQL_LOG_BIN=0; is added to the output.


--数据恢复 3、新建恢复账号 mysql> create user apply_log@'%' identified by '123456'; mysql> grant super,system_variables_admin,drop,create,insert,alter,file on *.* to apply_log@'%'; mysql> flush privileges; mysql> exit 4、导入数据 --直接导入 mysqldump -uapply_log -p123456 -h192.168.100.83 -P3306 mydb <mydb.sql --source导入 mysqldump -uapply_log -p123456 -h192.168.100.83 -P3306 use mydb source mydb.sql;


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论