首页 > 数据库技术 > 详细

MySQL数据库备份还原

时间:2019-11-10 15:20:45      阅读:97      评论:0      收藏:0      [点我收藏+]

本文以CentOS 7 yum安装的MariaDB-server5.5为例,说明MySQL的几种 备份还原方式

将服务器A(192.168.1.100)上的数据库备份,还原到B(192.168.1.200)服务器上

一、冷备份

冷备份是关闭数据库,直接拷贝数据库的datadir目录中的所有文件到新主机上。

1、关闭A的数据库

  # systemctl stop mariadb

2、将数据库目录打包压缩

  # tar zcvf /tmp/back.tar.gz /var/lib/mysql

3、将数据库文件和配置文件都拷贝到B主机

  # scp /etc/my.cnf  192.168.1.200:/tmp

  # scp /tmp/back.tar.gz 192.168.1.200:/tmp

4、在B上解压文件,并将文件拷贝到对应目录

  # tar xf /tmp/back.tar.gz

  # rm /var/lib/mysql/* -rf

       # cp -r /tmp/var/lib/mysql/*  /var/lib/mysql/

  # cp /tmp/my.cnf /etc/my.cnf

5、修改B数据目录权限

  # chown -R mysql:mysql /var/lib/mysql

6、启动B的数据库服务

  # systemctl start mariadb

 

二、mysqldump备份

mysqldump命令是mysql客户端自带的备份软件,可以实现数据库在线备份。

mysqldump支持三种用法

  1、mysqldump [OPTIONS] database [tables] 

    选择需要备份的一个数据库,或一个表 。没有创建数据库命令,适用于备份某个表的情况。

  2、mysqldump [OPTIONS] –B DB1 [DB2 DB3...]

                     -B | --databases       选择需要备份的库,可以选择多个

  3、mysqldump [OPTIONS] –A [OPTIONS]

      把当前实例的所有数据库都进行备份。

 

mysqldump常见选项:

  -A, --all-databases 备份所有数据库,含create database

       -B , --databases db_name… 指定备份的数据库,包括create database语句

       -E, --events:备份相关的所有event scheduler

       -R, --routines:备份所有存储过程和自定义函数

       --triggers:备份表相关触发器,默认启用,用--skip-triggers,不备份触发器

       --default-character-set=utf8 指定字符集  #工作中要查看实际的字符集

       --master-data[=#]: 1或2,此选项须启用二进制日志 会在二进制日志中增加记录点

    1:所备份的数据之前加一条记录为CHANGE MASTER TO语句,非注释,不指定

    2:记录为注释的CHANGE MASTER TO语句

                此选项会自动关闭--lock-tables功能,自动打开-x | --lock-all-tables功能(除非开启--single-transaction)

-F, --flush-logs :备份前滚动日志,锁定表完成后,执行flush logs命令,生成新的二进制日志文件,配合-A 或 -B 选项时,会导致刷新多次数据库。建议在同一时刻执行转储和日志刷新,可通过和--single-transaction或-x,--master-data 一起使用实现,此时只刷新一次日志

       --compact 去掉注释,适合调试,生产不使用

       -d, --no-data 只备份表结构

       -t, --no-create-info 只备份数据,不备份create table

       -n,--no-create-db 不备份create database,可被-A或-B覆盖

       --flush-privileges 备份mysql或相关时需要使用

       -f, --force 忽略SQL错误,继续执行

       --hex-blob 使用十六进制符号转储二进制列,当有包括BINARY, VARBINARY,BLOB,BIT的数据类型的列时使用,避免乱码

       -q, --quick 不缓存查询,直接输出,加快备份速度

 

InnoDB建议备份策略

  mysqldump -uroot -A -F -E -R --single-transaction --master-data=1 --flush-privileges --triggers --default-character-set=utf8 --hex-blob >$BACKUP/fullbak_$BACKUP_TIME.sql

 

举例说明:

备份:

在数据库A上进行在线备份
# mysqldump
-uroot -A -F -E -R --single-transaction --master-data=1 --flush-privileges --triggers --default-character-set=utf8 --hex-blob > /tmp/backup.sql 将备份的数据库拷贝到B主机上 # scp /tmp/backup.sql 192.168.1.200:/tmp 注意:B主机的数据库应该是全新的
还原:
启动B主机的数据库 # systemctl start mariadb 导入数据库 # mysql
< /tmp/backup.sql

 

三、通过mysqlbinlog进行差值的备份

此备份方法是配合方法二使用的,通过mysqldump进行定期全备份。再通过mysqlbinlog进行差值备份。还原数据库的时候先还原全备份,然后再还原差值备份的数据。

mysqlbinlog的命令用法

    mysqlbinlog [OPTIONS] log_file…

        --start-position=#             指定开始位置

        --stop-position=#              指定结束为止

        --start-datetime=

        --stop-datetime=

 

举例说明

备份:

在数据库A上进行全备份
# mysqldump -uroot -A -F -E -R --single-transaction --master-data=1 --flush-privileges --triggers --default-character-set=utf8 --hex-blob > /tmp/backup.sql

通过less命令查看全备份备份到的日志位置
# less /tmp/backup.sql
。。。。。
CHANGE MASTER TO MASTER_LOG_FILE=mariadb-bin.000003, MASTER_LOG_POS=245;
。。。。。
由此可以看出全备份的时候备份到了‘mariadb-bin.000003‘,的245位置。

通过刚查看到的备份位置进行差值备份
# mysqlbinlog --start-position=245 mariadb-bin.000003 >> /tmp/inc.sql
如果有往后的其他binlog日志也都通过>>追加到/tmp/inc.sql文件中

拷贝备份的数据库到服务器B
# scp /tmp/backup.sql 192.168.1.200:/tmp
# scp /tmp/inc.sql 192.168.1.200:/tmp

还原

安装数据库,启动数据库服务
# systemctl start mariadb

导入数据
# mysql < /tmp/backup.sql
# mysql < /tmp/inc.sql

 

MySQL数据库备份还原

原文:https://www.cnblogs.com/ysuwangqiang/p/11829698.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!