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

  • 1
  • 2
  • 下一页

相关内容

    暂无相关文章