doc: 阅读mysql备份文档
This commit is contained in:
@@ -60,4 +60,85 @@ mysqldump --all-databases >dump.sql
|
|||||||
```sql
|
```sql
|
||||||
mysqldump --databases db1 db2 db3 > dump.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 <test_backup.sql
|
||||||
|
```
|
||||||
|
|
||||||
|
除了上述方式外,还可以通过source命令来对逻辑备份进行恢复,示例如下:
|
||||||
|
```mysql
|
||||||
|
mysql> 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`则是可以选择从二进制日志的某个时间点来进行恢复。
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user