数据库恢复数据

上一篇为大家整理了数据库中的备份,那么这一篇文章将学习各种备份恢复方法。这里假定备份和二进制日志(binary log)在服务器上是可用的。

从mysqldump和mysqlpump中恢复
逻辑备份工具mysqldump和mysqlpump将数据写入单个文件。
如何操作
登录备份所在的服务器:
shell> cat /backups/full_backup.sql | mysql -u <user> -p
或者
shell> mysql -u <user> -p < /backups/full_backup.sql
要在远程服务器上恢复,可以使用-h <主机名> 选项:
shell> cat /backups/full_backup.sql | mysql -u <user> -p -h <remote_hostname>
当恢复一个备份时,该备份的语句将被记录到二进制日志中,这可能会拖慢恢复过程。如果不希望恢复过程被写入二进制日志,则可以使用 SET SQL_LOG_BIN = 0;选项在session(会话)级别关闭这个功能:
shell> (echo “SET SQL_LOG_BIN = 0;”; cat /backups/full_backup.sql) | mysql \ > -u <user> -p -h <remote_hostname>
或者使用
mysql> SET SQL_LOG_BIN=0; source full_backup.sql

使用myloader从mydumper中恢复
myloader是多线程恢复mydumper备份集的工具。myloader与mydumper是一起的,不需要单独安装。
如何操作
myloader的常用选项有:要连接的MySQL服务器的主机名(默认为localhost)、用户名、密码和端口。

恢复完整的数据库
shell> myloader --directory=/backups --user=<user> --password=<password> > --queries-per-transaction=5000 --threads=8 --compress-protocol --overwrite- tables

–overwrite-tables:这个选项会删除已经存在的表;
–compress-protocol:该选项在MySQL连接上使用压缩;
–threads:该选项指定要使用的线程数量,默认值是4;
–queries-per-transaction:指定每个事务的查询数量,默认值是1000;
–directory:指定要导入的转储目录。

恢复单个数据库
可以指定–source-db <db_name>,仅恢复单个数据库。
假设你想恢复company数据库:
shell> myloader --directory=/backups --queries-per-transaction=5000 --threads=6
\
> --compress-protocol --user= --password=
> --source-db company --overwrite-tables

恢复单个表
mydumper将每个表的备份写入单独的.sql文件。你可以选择这个.sql文件并恢复:
shell> mysql -u <user> -p<password> -h <hostname> company -A -f <
company.payments.sql

如果这个表被拆分为chunk(块),则可以将与这个表相关的所有chunk和信息复制到一个目录并指定其位置。
复制所需的文件:
shell> cp /backups/employee_table_chunks/employees.employees.* \
/backups/employee_table_chunks/employees.employees-schema.sql \
/backups/employee_table_chunks/employees-schema-create.sql \
/backups/employee_table_chunks/metadata \
/backups/single_table/

使用myloader加载,它会自动检测chunk并加载它们:
shell> myloader --directory=/backups/single_table/ --queries-per-
transaction=5000 --threads=6 \
> --compress-protocol --overwrite-tables

从普通文件备份中恢复
从普通文件备份中恢复,需要先关闭MySQL服务器,替换所有文件,更改权限,然后再启动MySQL。

  1. 停止MySQL服务器的运行;
  2. 将文件移至数据目录:
    shell> mv /backup/mysql /var/lib
  3. 将所有权更改为mysql:
    shell> chown -R mysql:mysql /var/lib/mysql
  4. 启动MySQL。

执行时间点恢复
一旦恢复完整的备份后,仍需要恢复二进制日志以获得时间点(point-in-time)恢复。备份集提供截止到备份可用时的二进制日志坐标。
应该根据mysqldump中指定的–dump-slave或–master-data选项从备份所在的服务器中选择二进制日
志备份。
如何操作
根据情况不同,有很多操作细节需要注意
mysqldump或mysqlpump
根据你传给mysqldump/mysqlpump的选项,二进制日志信息被作为CHANGE MASTER TO 命令存储
在SQL文件中。

  1. 如果你用了–master-data,则应使用从服务器的二进制日志:
    shell> head -30 /backups/dump.sql
    …略
    – Position to start replication or point-in-time recovery from

    CHANGE MASTER TO MASTER_LOG_FILE=‘server1.000008’, MASTER_LOG_POS=154;

在这种情况下,应该从位于从服务器,位置为154处的server1.000008文件开始恢复。
shell> mysqlbinlog --start-position=154 --disable-log-bin \
> /backups/binlogs/server1.000008 | mysql -u -p -h -f

  1. 如果你用了–dump-slave,则应该使用主服务器上的二进制日志:

    – Position to start replication or point-in-time recovery from (the master of
    this slave)

    CHANGE MASTER TO MASTER_LOG_FILE=‘centos7-bin.000001’,MASTER_LOG_POS=463;

在这种情况下,应该从位于主服务器,位置为463处的centos7-bin.000001文件开始恢复。
shell> mysqlbinlog --start-position=463 --disable-log-bin \
> /backups/binlogs/centos7-bin.000001 | mysql -u -p -h -f

mydumper
二进制日志信息可以从元数据中获取:
[root@www backups]# cat …/backups/metadata
Started dump at: 2019-10-28 22:05:32
SHOW MASTER STATUS:
Log: server1.000012
Pos: 155
GTID:
SHOW SLAVE STATUS:
Host: 35.186.158.188
Log: centos7-bin.000001
Pos: 463
GTID:
Finished dump at: 2019-10-28 22:05:37

如果你已经从从服务器中获取二进制日志备份,则应从位置为155(SHOW MASTER STATUS)的server1.000012文件开始恢复:
shell> mysqlbinlog --start-position=155 --disable-log-bin \
> /backups/binlogs/server1.000012 | mysql -u -p -h -f

如果你有来自主服务器的二进制日志备份,则应从位置为463(SHOW SLAVE STATUS)的centos7- bin.000001文件开始恢复:
shell> mysqlbinlog --start-position=463 --disable-log-bin \
> /backups/binlogs/centos7-bin.000001 | mysql -u -p -h -f

猜你喜欢

转载自blog.csdn.net/wangboyujiayou/article/details/106780423