MySQL管理之基于LVM实现几乎热备
MySQL管理之基于LVM实现几乎热备
基于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的事物日志内容可能正在往磁盘上写,所以必须保证事物日志和数据文件必须在同一快照上,如果我们分别对问或路径创建快照,很有可能造成数据和时间点的不一致,因此就算备份出来也无法恢复
|
评论暂时关闭