MySQL管理之基于LVM实现几乎热备

2014-11-24 17:27:10 · 作者: · 浏览: 0

基于LVM实现MySQL几乎热备


几乎热备:


对mysql而言,我们如果想实现lvm方式创建快照,在快照创建那一刻,innodb的事物日志内容可能正在往磁盘上写,所以必须保证事物日志和数据文件必须在同一快照上,如果我们分别对问或路径创建快照,很有可能造成数据和时间点的不一致,因此就算备份出来也无法恢复



准备工作


将整个数据导出,以防万一,如果没有放在逻辑卷上,那么则将数据导出备份并删除数据目录,使用lvm方式创建分区并古仔,将数据再覆盖至原先/mydata/data下 最后初始化数据库



创建lvm之前必须将mysql数据全部备份并在创建lvm之后对其恢复


[root@test ~]#mysqldump -uroot --lock-all-tables --all-databases --events > /tmp/alldb.sql


删除数据目录并创建逻辑卷


[root@test ~]#/etc/init.d/mysqld stop


Shutting downMySQL.. SUCCESS!


[root@test ~]# rm-fr /mydata/


首先进行分区,步骤略过


Device Boot Start End Blocks Id System


/dev/sdb1 1 393 3156741 8e Linux LVM


/dev/sdb2 394 786 3156772+ 8e Linux LVM


创建LVM


root@test ~]#pvcreate /dev/sdb


sdb sdb1 sdb2


[root@test ~]#pvcreate /dev/sdb{1,2}


Physical volume "/dev/sdb1"successfully created


Physical volume "/dev/sdb2"successfully created


[root@test ~]#vgcreate myvg /dev/sdb{1,2}


Volume group "myvg" successfullycreated


[root@test ~]#lvcreate -L 3G -n mydata myvg


Logical volume "mydata" created


[root@test ~]#mke2fs -t ext4 -L MYDATA /dev/


将lvm加入至开机启动项


[root@test ~]# echo'LABEL=MYDATA/mydata ext4 defaults0 0' >> /etc/fstab


[root@test ~]#mount -a


[root@test ~]# df-h


Filesystem Size Used Avail Use% Mounted on


/dev/sda3 6.3G 4.2G 1.8G 72% /


tmpfs 245M 0 245M 0% /dev/shm


/dev/sda1 194M 28M 156M 16% /boot


/dev/mapper/myvg-mydata


3.0G 69M 2.8G 3% /mydata


创建数据目录并重新赋值


[root@test ~]#mkdir /mydata/data/


[root@test ~]#chown mysql.mysql -R /mydata/


初始化并启动mysql


[root@test ~]# cd/usr/local/mysql


[root@test mysql]#scripts/mysql_install_db --user=mysql --datadir=/mydata/data/



[root@test mysql]#/etc/init.d/mysqld start


Starting MySQL....SUCCESS!



导入数据


首先我们要关闭binlog,使其恢复操作不记录在二进制日志文件里


mysql> setsession sql_log_bin=0;


Query OK, 0 rowsaffected (0.00 sec)


导入数据库


mysql> source/tmp/alldb.sql;


mysql> showdatabases;


+--------------------+


| Database |


+--------------------+


|information_schema |


| mydb |


| mysql |


|performance_schema |


| test |


| wpdb |


+--------------------+


6 rows in set (0.00sec)


此时我们的二进制日志文件可以开启了,因为是当前会话设置,可以直接退出在进入即可


mysql> setsession sql_log_bin=1;


Query OK, 0 rowsaffected (0.00 sec)



实现几乎热备


我们创建快照那一刻起必须保证数据没有被修改,所以想实现lvm备份必须打开一个远程mysql会话将所有表都锁定,并记录二进制的位置;


如果mysql数据库上正在执行一个事物的话,那么这个请求锁可能会等待一段时间,等待多久我们是未知的,有可能等待半个小时到一个小时也未可知,但步骤是不可少的。


一旦发现加锁成功,另启终端,使用lvcreate命令为数据所在的卷创建快照


对mysql而言,我们如果想实现lvm方式创建快照,在快照创建那一刻,innodb的事物日志内容可能正在往磁盘上写,所以必须保证事物日志和数据文件必须在同一快照上,如果我们分别对问或路径创建快照,很有可能造成数据和时间点的不一致,因此就算备份出来也无法恢复