MySQL常见备份方案

MySQL常见备份方案

MySQL常见备份方案有以下三种:

       mysqldump + binlog

       lvm + binlog  

       xtrabackup

本例为方便演示,数据库里面数据为空。下面开始动手

mkdir /opt/backup                                #创建备份目录
mkdir -p /data/3309/{data,binlog}     
cd /usr/local/mysql/
scripts/mysql_install_db --user=mysql --datadir=/data/3309/data/ --basedir=/usr/local/mysql/ 
chown mysql.mysql -R /data/3309/ 
cp support-files/my-small.cnf /data/3309/my.cnf   #提供配置文件

vim /data/3309/my.cnf                             #编辑配置文件
[client]
#password       = your_password
port            = 3309
socket          = /tmp/mysql.sock4
# The MySQL server
[mysqld]
port            = 3309
socket          = /tmp/mysql.sock4
skip-external-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K
datadir = /data/3309/data
server-id       = 3309
log-bin=/data/3309/binlog/mysql-bin   #二进制日志位置
binlog_format=mixed               #二进制日志格式
log-error = /data/3309/mysql-err       #错误日志位置 
innodb_file_per_table = 1            #为每一个新数据表创建一个表空间文件
sync_binlog = 1                    #写二进制日志的时候,同步到磁盘上面

cp /data/3309/my.cnf /opt/backup/   #备份配置文件
mysqld_safe --defaults-file=/data/3309/my.cnf &  #启动mysql

 

1、利用mysqldump完全备份mysql,配合二进制日志备份实现增量备份

mysqldump 选项请参考http://wangweiak47.blog.51cto.com/2337362/1589304

1.1提供模拟数据

mysql -S /tmp/mysql.sock4   #连接mysql
mysql> use test;
Database changed
mysql> create table test (id int(2),comment char(30));  #创建表
Query OK, 0 rows affected (0.34 sec)
 
mysql> insert into test values (1,'yun zhonghe');  #插入数据
Query OK, 1 row affected (0.16 sec)

 

1.2全量备份:

mysqldump -S /tmp/mysql.sock4 -A -B -F -x --events --triggers --routines --master-data=2 > /opt/backup/all_data-`date +%F--%U`.sql

1.3 模拟数据发生改变

mysql> insert into test values (2,'yun zhonghe2');    #再插入一条数据。
Query OK, 1 row affected (0.11 sec)

1.4 增量备份

mysqladmin -S /tmp/mysql.sock4 flush-logs   #增量备份前,先滚动一下二进制日志。
cp `cat /data/3309/binlog/mysql-bin.index | tail -n 2 | head -n 1` /opt/backup/   #备份二进制日志

1.5 数据损坏

rm -rf /data/3309/
killall mysqld

1.6 恢复

上面已经提供了步骤,直接复制过来使用。

mkdir -p /data/3309/{data,binlog}
cd /usr/local/mysql/
scripts/mysql_install_db --user=mysql --datadir=/data/3309/data/ --basedir=/usr/local/mysql/
cp /opt/backup/my.cnf /data/3309/
chown mysql.mysql -R /data/3309/
mysqld_safe --defaults-file=/data/3309/my.cnf &    

mysql -S /tmp/mysql.sock4     #连接mysql查看数据
mysql> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)
 
mysql> show variables like 'sql_log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_log_bin   | OFF   |
+---------------+-------+
1 row in set (0.00 sec)
 
mysql> source /opt/backup/all_data-2015-10-01--39.sql
 
mysql> select * from test.test;   #还缺一个数据
+------+-------------+
| id   | comment     |
+------+-------------+
|    1 | yun zhonghe |
+------+-------------+
1 row in set (0.00 sec)  
 
mysql> source /tmp/incres-1.sql;
 
mysql> select * from test.test;   #数据已恢复
+------+--------------+
| id   | comment      |
+------+--------------+
|    1 | yun zhonghe  |
|    2 | yun zhonghe2 |
+------+--------------+
2 rows in set (0.00 sec)
 
mysql> set sql_log_bin = 1;  #打开二进制记录开关。

 

 

 

1.7小结,mysqldump适合于数据量较小的场合,它的优点是有众多选项,使用起来非常灵活,缺点是数据量一旦过大,非常耗时耗力。

 

2、使用lvm进行全备。

lvm快照卷原理参考

http://baike.baidu.com/link?url=iEpO_zm_AbHbk-ijQa8jNcFRoPPG2NdTYb_cRoQ7mjQb_ag9g-fL7yHPXV7Atp2j3J0L5xYynM9KKLIwycW_S_

2.1 数据接着上次继续开始。

2.2 全备。

需保证数据库存放在逻辑卷组上面,才行。

2.2.1首先锁表和滚动日志

mysql> flush table with read lock;
Query OK, 0 rows affected (0.02 sec)
 
mysql -S /tmp/mysql.sock4 -e 'show master status;' > /backup/master.info  #记录当前日志信息
mysqladmin -S /tmp/mysql.sock4 flush-logs   #滚动日志

 

2.2.2创建快照

lvcreate -s -n snap_data -L 500M /dev/vg_node5/mylv_data
  Logical volume "snap_data" created

2.2.3 解锁表

mysql> unlock tables;  
Query OK, 0 rows affected (0.00 sec)

2.2.4 复制快照卷数据到备份目录下

mkdir -p /backup/lvm
mount /dev/vg_node5/snap_data /mnt/lvm
cp -R /mnt/3309/* /backup/lvm

2.2.5 删除快照

umount /mnt
lvremove /dev/mapper/vg_node5-snap_data
Do you really want to remove active logical volume snap_data? [y/n]: y
  Logical volume "snap_data" successfully removed

 

2.3增量备份,只需和定时复制binlog到备份目录下面即可

2.4恢复,只需要直接拷贝备份目录下的文件即可

killall mysqld
rm -rf /data/3309/
cp -R /backup/lvm/ /data/3309/
chown mysql.mysql -R /data/3309/
mysqld_safe --defaults-file=/data/3309/my.cnf &
ss -tnl | grep 330
LISTEN     0      50                        *:3309                     *:* 
 
mysql> select * from test.test;   #数据未改变
+------+--------------+
| id   | comment      |
+------+--------------+
|    1 | yun zhonghe  |
|    2 | yun zhonghe2 |
+------+--------------+

 

2.5小结:

lvm实现物理备份速度相对mysqldump来比较快,实现也比较简单,是不错的选择。

缺点:数据目录必须存放在lvm卷组上面

 

3、使用xtrabackup实现热备。

请自行到官网下载并安装对应的rpm包。

使用方法参考:详细参考:

http://www.cnblogs.com/Amaranthus/archive/2014/08/19/3922570.html

3.1创建一个具有最小权限的用户

mkdir /backup/xtrabackup
mysql> grant RELOAD, LOCK TABLES, REPLICATION CLIENT on *.* to 'bkuser'@'localhost' identified by '123456';
mysql> flush privileges;

3.2完全热备。

使用innobakupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命令的目录中。

innobackupex --user=bkuser --password=123456 --socket=/tmp/mysql.sock4 --defaults-file=/data/3309/my.cnf /backup/xtrabackup/ #相关选项自行help。
#nnobackupex: completed OK! #出现此选项代表备份完成。
ls /backup/xtrabackup/
2015-10-01_17-00-13

 

(1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;

每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。

(2)xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。

(3)xtrabackup_binlog_pos_innodb —— 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。

(4)xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;

(5)backup-my.cnf —— 备份命令用到的配置选项信息;

3.3提供改变数据。

mysql> insert into test.test values (3,'yun zhonghe3');
Query OK, 1 row affected (0.03 sec)

3.4增量备份

innobackupex --user=bkuser --password=123456 --socket=/tmp/mysql.sock4 --defaults-file=/data/3309/my.cnf --incremental /backup/xtrabackup/ --incremental-basedir=/backup/xtrabackup/2015-10-01_17-00-13/

3.5 模拟数据损坏

rm -rf /data/3309/
killall mysqld

3.6增量备份恢复

innobackupex --apply-log --redo-only /backup/xtrabackup/2015-10-01_17-00-13/
innobackupex --apply-log --redo-only /backup/xtrabackup/2015-10-01_17-00-13/ --incremental-dir=/backup/xtrabackup/2015-10-01_17-15-00/

#注意,多实例的话,仍然需要备份配置文件,启动的时候需要binlog目录。

mkdir -p /data/3309/{data,binlog}
chown mysql.mysql -R /data/
cp /opt/backup/my.cnf /data/3309/
innobackupex --copy-back /backup/xtrabackup/2015-10-01_17-00-13/ --defaults-file=/opt/backup/my.cnf   #恢复数据。

 

3.6启动数据库查看。

mysqld_safe --defaults-file=/data/3309/my.cnf &
mysql -S /tmp/mysql.sock4
mysql> select * from test.test;   #数据修复完成。
+------+--------------+
| id   | comment      |
+------+--------------+
|    1 | yun zhonghe  |
|    2 | yun zhonghe2 |
|    3 | yun zhonghe3 |
+------+--------------+
3 rows in set (0.01 sec)

 

小结:

xtrabacup具有如下特点。

(1)备份过程快速、可靠;

(2)备份过程不会打断正在执行的事务;

(3)能够基于压缩等功能节约磁盘空间和流量;

(4)自动实现备份检验;

(5)还原速度快;

因此建议学会熟练使用xtrabackup进行备份和还原

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119679.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 无人机——舵机篇(七)[通俗易懂]

    无人机——舵机篇(七)[通俗易懂]文章目录1.舵机的基本知识2.舵机的组成3.舵机的工作原理1.舵机的基本知识舵机就是一种有输出轴的小传动装置。这个输出轴能够通过向舵机输入一个编码信号而定位到我们指定的角度位置。只要这个编码信号存在于信号输入线上,舵机就将保持输出轴的当前角度位置不变。一旦编码信号改变,输出轴的角度位置也将跟着改变。实际中,舵机被用于控制无人机升降尾翼、方向尾翼等的位置。

    2022年6月11日
    280
  • spring管理quartz生命周期之`SchedulerFactoryBean`

    spring管理quartz生命周期之`SchedulerFactoryBean`spring管理quartz生命周期之SchedulerFactoryBeanspring通过SchedulerFactoryBean来管理quartz的生命周期。在spring容器启动时启动调度器,在spring容器关闭时停止调度器FactoryBeanthatcreatesandconfiguresaQuartz{@linkorg.quartz.Scheduler}…

    2022年5月23日
    34
  • 国内常用公共DNS服务器、各省运营商DNS服务器汇总

    原文  http://www.francissoung.com/2016/03/14/常用公共DNS服务器/主题 DNS服务器 服务器 运营商不知道大家有没有过网络是正常的,QQ可以正常登录、游戏也可以正常玩,但是网页无论如何都打不开。这就是电脑网络设置的DNS服务器有问题,不是其故障就是不工作了。换了DNS服务器成功解决问题。下边给大家分享一下国内比较大型大众常用

    2022年4月17日
    437
  • Python格式化字符串(格式化输出)_python字符和数字转换

    Python格式化字符串(格式化输出)_python字符和数字转换从Python2.6开始,有一个替代方法:方法str.format()。下面是一些使用现有字符串格式运算符(%)的示例:>>>”Name:%s,age:%d”%(‘John’,35)’Name:John,age:35′>>>i=45>>>’dec:%d/oct:%#o/hex:%#X’%(i,i,i)’…

    2022年10月12日
    0
  • mysql常用语句大全_什么是SQL语句

    mysql常用语句大全_什么是SQL语句讲解了,MySQL中常用的语法,并且包含了使用实例。

    2022年9月5日
    3
  • zabbix 监控服务器_docker监控工具有哪些

    zabbix 监控服务器_docker监控工具有哪些服务器监控工具服务器监控工具功能相当强大,无论何时何地,我们都可以了解到服务器的功能以及性能。服务器监控工具的使用,可以让我们清楚的知道用户可以打开我们的网站,且确保网速不慢。只有这样做,才能留住宝贵的用户,以免因为系统停运的原因,导致用户丢失。监控工具:cacti、Nagios、Ganglia、zabbixcacti:它是一款数据采集、数据存储,外加web界面展示的工具,它的数据展示功能…

    2025年6月21日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号