doc: 阅读mysql备份文档

This commit is contained in:
asahi
2025-09-01 19:34:39 +08:00
parent 64436d8cd4
commit 5d8eeee8ad

View File

@@ -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`则是可以选择从二进制日志的某个时间点来进行恢复。