使用 LVM 重建从站
这是我们使用 Linux LVM 重建 MySQL 从站的方法。这保证了一致的快照,同时在您的主服务器上需要非常短的停机时间。
在主 MySQL 服务器上将 innodb 最大脏页百分比设置为零。这将强制 MySQL 将所有页面写入磁盘,从而显着加快重启速度。
set global innodb_max_dirty_pages_pct = 0;
要监控脏页的数量运行命令
mysqladmin ext -i10 | grep dirty
一旦数字停止减少,您就可以继续。接下来重置master以清除旧的bin日志/中继日志:
RESET MASTER;
执行lvdisplay获取LV路径
lvdisplay
输出将如下所示
--- Logical volume ---
LV Path /dev/vg_mysql/lv_data
LV Name lv_data
VG Name vg_mysql
使用命令关闭主数据库
service mysql stop
接下来拍摄快照,mysql_snapshot 将是新的逻辑卷名。如果二进制日志放置在操作系统驱动器上,则也需要进行快照。
lvcreate --size 10G --snapshot --name mysql_snapshot /dev/vg_mysql/lv_data
用命令重新启动master
service mysql start
将脏页设置恢复为默认值
set global innodb_max_dirty_pages_pct = 75;
再次运行 lvdisplay 以确保快照存在且可见
lvdisplay
输出:
--- Logical volume ---
LV Path /dev/vg_mysql/mysql_snapshot
LV Name mysql_snapshot
VG Name vg_mysql
挂载快照
mkdir /mnt/mysql_snapshot
mount /dev/vg_mysql/mysql_snapshot /mnt/mysql_snapshot
如果你有一个现有的 MySQL slave 正在运行,你需要停止它
service mysql stop
接下来你需要清除 MySQL 数据文件夹
cd /var/lib/mysql
rm -fr *
回到大师。现在将快照同步到 MySQL 从站
rsync --progress -harz /mnt/mysql_snapshot/ targethostname:/var/lib/mysql/
rsync 完成后,您可以卸载并删除快照
umount /mnt/mysql_snapshot
lvremove -f /dev/vg_mysql/mysql_snapshot
如果旧的复制用户不存在或密码未知,则在主服务器上创建复制用户
GRANT REPLICATION SLAVE on *.* to 'replication'@'[SLAVE IP]' identified by 'YourPass';
验证 /var/lib/mysql 数据文件是否归 mysql 用户所有,如果是可以省略以下命令:
chown -R mysql:mysql /var/lib/mysql
接下来记录binlog位置
ls -laF | grep mysql-bin
你会看到类似的东西
..
-rw-rw---- 1 mysql mysql 1073750329 Aug 28 03:33 mysql-bin.000017
-rw-rw---- 1 mysql mysql 1073741932 Aug 28 08:32 mysql-bin.000018
-rw-rw---- 1 mysql mysql 963333441 Aug 28 15:37 mysql-bin.000019
-rw-rw---- 1 mysql mysql 65657162 Aug 28 16:44 mysql-bin.000020
这里的主日志文件是顺序中最高的文件号,bin日志位置是文件大小。记录这些值:
master_log_file=mysql-bin.000020
master_log_post=65657162
接下来启动slave MySQL
service mysql start
通过执行以下命令在从站上执行更改主命令:
CHANGE MASTER TO
master_host="10.0.0.12",
master_user="replication",
master_password="YourPass",
master_log_file="mysql-bin.000020",
master_log_pos=65657162;
终于启动slave
SLAVE START;
检查从属状态:
SHOW SLAVE STATUS;
确保 Slave IO 正在运行并且没有连接错误。祝你好运!
我最近在我的博客上写了这篇文章,可以在这里找到...那里没有更多细节,但故事是一样的。
http://www.juhavehnia.com/2015/05/rebuilding-mysql-slave-using-linux-lvm.html