lvm备份mysql数据库参考


常见的mysql数据库备份方法在停服的情况下,有自带的'mysqldump'及'mysqlhotcopy'工具来实现,且在数据量不多的情况下,一旦数据量过多,这两种方法显得力不从心了。即使在访问量最小的时候备份,也不对业务系统产生不小的影响,这里采用了一种基于'lvm'文件系统分区工具的基础上的备份方式,相信对你提供备份有所帮助。当然,前提是所要备份数据存于此类文件分区之上,当然最好是一个独立专用区。
1、首先登录进服务器进行锁表操作
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
可以查看master状态,可以看到其不再滚动。
mysql>SHOW MASTER STATUS;
注意:锁表的终端会话不能退出,否则锁表会自动取消。
2、创建快照卷
#为分区卷'/dev/vg0/lv0_data'创建一个名为'dbbackup'的快照。
# lvcreate -L18G -s -n dbbackup /dev/vg0/lv0_data
Volume group "vg0" has insufficient free space (32 extents): 512 required.
#空间不足,需要给lvm释放空间。
# lvcreate -L18G -s -n dbbackup /dev/vg0/lv0_data
Logical volume "dbbackup" created
Using lvscan again, the new snapshot can be seen.
# lvscan
ACTIVE '/dev/vg0/lv0_root' [7.81 GB] inherit
ACTIVE '/dev/vg0/lv0_home' [5.06 GB] inherit
ACTIVE '/dev/vg0/lv0_swap' [992.00 MB] inherit
ACTIVE Original '/dev/vg0/lv0_data' [25.00 GB] inherit
ACTIVE Snapshot '/dev/vg0/dbbackup' [18.00 GB] inherit
现对lvm快照进行挂载 (如果分区 '/dev/vg0/var'是 'XFS volume', 可以使用"-o nouuid -t xfs" 来进行挂载)。至此数据库所在的分区已经备份好了,可以进行所挂载的目录进行查看。为了不影响业务,回到锁mysql库表的终端进行解锁操作:
mysql>unlock tables;
3、对快照出来的数据进行操作
mkdir -p /mnt/snapshot
mount /dev/vg0/dbbackup /mnt/snapshot
我们可以'/mnt/snapshot'来开启第二个实例,在开启之前我们要取得一些相关参数:
第一个实例的运行端口
# mysqladmin variables | grep port
| port | 3306 |
第一个实例的套接字
# mysqladmin variables | grep socket
| socket | /var/run/mysqld/mysqld.sock |
第一个实例的'--innodb-log-file-size'
# mysqladmin variables | grep innodb_log_file_size
| innodb_log_file_size | 268435456
知道这些信息后,可以现开启第二个实例:
mysqld_safe --no-defaults --port=3308 --socket=/var/run/mysqld/mysqld-snapshot.sock --datadir=/mnt/snapshot/mysql/var/ --innodb-log-file-size=268435456 &
现可以对第二个mysql实例进行操作了,可以使用'mysqldump‘来连接本地'socket'来进行备份操作。
mysqldump -S /var/run/mysqld/mysql-snapshot.sock | gzip > /path/to/mysql/backup.sql.gz
甚或可以将它做为第一个实例的从辅库,当然要参考上面所得到的主服的位置,同时为本实例编写相应的配置文件,这理就不详述了。
4、清理
使用mysqladmin将第二台mysql服务器停止
mysqladmin -S /var/run/mysqld/mysqld-snapshot.sock shutdown
卸载'snapshot volume'
umount /mnt/snapshot
删除'LVM snapshot'
# lvremove /dev/vg0/dbbackup
Do you really want to remove active logical volume dbbackup? [y/n]: y
Logical volume "dbbackup" successfully removed
至此完成。
1、首先登录进服务器进行锁表操作
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
可以查看master状态,可以看到其不再滚动。
mysql>SHOW MASTER STATUS;
注意:锁表的终端会话不能退出,否则锁表会自动取消。
2、创建快照卷
#为分区卷'/dev/vg0/lv0_data'创建一个名为'dbbackup'的快照。
# lvcreate -L18G -s -n dbbackup /dev/vg0/lv0_data
Volume group "vg0" has insufficient free space (32 extents): 512 required.
#空间不足,需要给lvm释放空间。
# lvcreate -L18G -s -n dbbackup /dev/vg0/lv0_data
Logical volume "dbbackup" created
Using lvscan again, the new snapshot can be seen.
# lvscan
ACTIVE '/dev/vg0/lv0_root' [7.81 GB] inherit
ACTIVE '/dev/vg0/lv0_home' [5.06 GB] inherit
ACTIVE '/dev/vg0/lv0_swap' [992.00 MB] inherit
ACTIVE Original '/dev/vg0/lv0_data' [25.00 GB] inherit
ACTIVE Snapshot '/dev/vg0/dbbackup' [18.00 GB] inherit
现对lvm快照进行挂载 (如果分区 '/dev/vg0/var'是 'XFS volume', 可以使用"-o nouuid -t xfs" 来进行挂载)。至此数据库所在的分区已经备份好了,可以进行所挂载的目录进行查看。为了不影响业务,回到锁mysql库表的终端进行解锁操作:
mysql>unlock tables;
3、对快照出来的数据进行操作
mkdir -p /mnt/snapshot
mount /dev/vg0/dbbackup /mnt/snapshot
我们可以'/mnt/snapshot'来开启第二个实例,在开启之前我们要取得一些相关参数:
第一个实例的运行端口
# mysqladmin variables | grep port
| port | 3306 |
第一个实例的套接字
# mysqladmin variables | grep socket
| socket | /var/run/mysqld/mysqld.sock |
第一个实例的'--innodb-log-file-size'
# mysqladmin variables | grep innodb_log_file_size
| innodb_log_file_size | 268435456
知道这些信息后,可以现开启第二个实例:
mysqld_safe --no-defaults --port=3308 --socket=/var/run/mysqld/mysqld-snapshot.sock --datadir=/mnt/snapshot/mysql/var/ --innodb-log-file-size=268435456 &
现可以对第二个mysql实例进行操作了,可以使用'mysqldump‘来连接本地'socket'来进行备份操作。
mysqldump -S /var/run/mysqld/mysql-snapshot.sock | gzip > /path/to/mysql/backup.sql.gz
甚或可以将它做为第一个实例的从辅库,当然要参考上面所得到的主服的位置,同时为本实例编写相应的配置文件,这理就不详述了。
4、清理
使用mysqladmin将第二台mysql服务器停止
mysqladmin -S /var/run/mysqld/mysqld-snapshot.sock shutdown
卸载'snapshot volume'
umount /mnt/snapshot
删除'LVM snapshot'
# lvremove /dev/vg0/dbbackup
Do you really want to remove active logical volume dbbackup? [y/n]: y
Logical volume "dbbackup" successfully removed
至此完成。