循环上面三个步骤;直到备份完毕。
由于 mysqldump 备份流程对每个库加锁进行导出的循环方式,所以并不能保证各库之间的数据一致性。
要保证完整的数据一致性使用--lock-all-tables 参数,在备份开始时会对 mysql 加全局读锁,直至整
个备份结束。但此种方式对于 PXC 或业务连续性高的场景不适用。对于 mysqldump 方式数据一致性细化要
求,需要了解**—lock-all-tables;—single-transaction;—lock-tables**三个参数。一般情
况下--single-transaction 参数,通过将导出行为放入一个事务执行,从而可以在保证数据一致性情况
下,不影响业务导出数据。--single-transaction 只能用在 innodb 引擎,导出过程中不能有任何人执
行 alter table,drop table,rename table,truncate table 等 DDL 语句。DDL 语句会被导
出事务的 metadata lock 阻塞。参见 myusqldump 常用参数。
mysqldump 导出数据是备份开始时的数据,而非备份结束时的数据。
##### 1)备份命令
```mysql
mysqldump -uroot -p[密码] --databases 库名 1 [库名 2].. >/备份路径/备份文件名.sql
mysqldump -uroot -p[密码] --all-databases > /备份路径/备份文件名.sql
mysqldump -uroot -p --all-databases --routines > ymt`date +'%Y%m%d%H'`.sql
```
备份出来的文件就是文本的 sql 语句,可以直接查看。
##### 2)恢复命令
可按全库恢复,单独库恢复,表恢复
```mysql
##删除数据库 yuji##
mysql -u root -p -e 'drop database yuji;'
#"-e"选项,用于指定连接 MySQL 后执行的命令,命令执行完后自动退出
mysql -u root -p -e 'SHOW DATABASES;' #查看当前有哪些数据库
##恢复全部数据库##
mysql -uroot -p < ymt2022082308.sql
##恢复数据库 yuji##
mysql -u root -p < /work/mysql_bak/ymt2022082308.sql #重定向输入库文件
mysql -u root -p -e 'SHOW DATABASES;' #查看当前有哪些数据库
##备份 yuji 库中的 class 表##
mysqldump -uroot -p yuji class > /work/mysql_bak/ymt_class.sql
##删除 yuji 库中的 class 表##
mysql -u root -p -e 'drop table yuji.class;'
mysql -u root -p -e 'show tables from yuji;' #查看 yuji 库中的表,已无 class 表
##恢复 yuji 库中的 class 表##
mysql -u root -p yuji < /work/mysql_bak/ymt_class.sql #重定向导入备份文件,必须指
定库名,且目标库必须存在
mysql -u root -p -e 'show tables from yuji;'
```
异机恢复只需初始化一个空库,并启动 mysql 服务
```mysql
初始化一个空库:
./bin/mysqld --initialize --user=mysql --datadir=/work/mysql/data
--basedir=/work/mysql
启动数据库,查初始密码
评论