diff --git a/mysql/mysql文档/mysql_备份.md b/mysql/mysql文档/mysql_备份.md index 32f3dea..5965ec4 100644 --- a/mysql/mysql文档/mysql_备份.md +++ b/mysql/mysql文档/mysql_备份.md @@ -60,4 +60,85 @@ mysqldump --all-databases >dump.sql ```sql mysqldump --databases db1 db2 db3 > dump.sql ``` +通过`--single-transaction`可以保证备份的一致性,示例如下: +```sql +mysqldump --single-transaction test >test_backup.sql +``` +上述操作针对`test`数据库创建了一个备份。 + +备份出的内容为表结构和表数据。 + +mysqldump命令用友如下较为重要的参数: + +#### --single-transaction +当指定了`--single-transaction`参数后,其在备份开始前会先执行`start transaction`命令,从而保证备份数据的一致性。 + +该参数只针对innodb存储引擎有效,且在启用该参数进行备份时,需要确保没有ddl语句在执行,一致性读操作并不能对ddl进行隔离。 + +#### --lock-tables(`-l`) +在备份时,会依次对表进行锁定,一般用于myisam存储引擎,在备份时只能对数据库执行读操作,同样可以保证备份的一致性。 + +对于innodb存储引擎,并不需要使用`-l`参数,使用`--single-transaction`参数即能够保证备份数据的一致性。 + +> `--single-transaction`选项和`--lock-tables`选项是互斥的,并不能够同时指定。 + +#### --lock-all-tables(`-x`) +在使用`-x`时,会针对数据库中所有的表都进行加锁,其能够避免`--lock-tables`不能锁住所有的表的问题。 + +#### --add-drop-database +在`create database`之前先调用`drop database`,该选项需要和`--all-databases`/`--databases`一起使用。默认情况下,导出的备份中并不会含有`create database`语句,除非手动指定该选项。 + +#### --routinues +该选项用于备份存储过程和函数 + +#### --triggers +该选项用于备份触发器 + +#### --hex-blob +将`binary, varbinary, blog, text`类型备份为16进制的格式。 + +### select ... into outfile +`select ... into outfile`也是一种逻辑备份方法,用于导出一张表中的数据,示例如下: +```sql +select * into outfile '/root/a.txt` from a; +``` +其中,导出路径的权限必须是`mysql:mysql`的,否则mysql会报错没有导出权限。 + +如果想要导出的文件已经存在,同样也会报错。 + +## 逻辑备份恢复 +### mysqldump +mysqldump的逻辑备份恢复比较简单,只需要执行备份出的sql语句即可,示例如下 +```bash +mysql -uroot -p source /home/mysql/test_backup.sql +``` + +### 二进制日志的备份和恢复 +通过二进制日志,用户可以实现point-in-time的恢复。 + +在备份二进制日志之前,可以通过`flush logs`命令来生成一个新的二进制日志文件,然后对之前的二进制日志文件进行备份。 + +可以通过`mysqlbinlog`命令对二进制日志进行恢复,示例如下: +```bash +mysqlbinlog binlog.0000001 | mysql -uroot -p test +``` + +如果要恢复多个二进制文件,可以按照如下方式: +```bash +mysqlbinlog binlog.[0-10]* | mysql -u root -p test +``` + +也可以通过`mysqlbinlog`命令导入到一个文件,然后再对文件执行source。 + +可以通过`--start-position`和`--stop-position`从二进制日志的指定偏移量来进行恢复,这样可以针对某些语句进行跳过,示例如下: +```bash +mysqlbinlog --start-position=107856 binlog.0000001 | mysql -uroot -p test +``` +`--start-datetime`和`--stop-datetime`则是可以选择从二进制日志的某个时间点来进行恢复。 +