美文网首页
Mysql 服务迁移

Mysql 服务迁移

作者: 黄了稻子 | 来源:发表于2020-01-21 18:09 被阅读0次

需求场景:因机器原因Mysql服务需要迁移到其他机器,这个Mysql服务所在机器为A; 此Mysql 版本5.1.73 ; 多个业务在使用这个Mysql 服务,要求迁移的时候尽可能不影响服务。目前这个Mysql是一个单点服务,并无从库。

解决方案:mysql router + xtrabackup

基本思想:如下图所示

使用xtrabackup 软件对Mysql A 进行一次全量备份,然后在机器B上进行恢复并设置成Mysql A  的从库,同时配置Mysql C、Mysql D 为 Mysql B 的从库;

使用 Mysql Router 的 Read-Writer 模式 ,将MySQL A 服务配置在 Mysql B 服务的前面, 修改Mysql Client 使其从MySQL Router 服务读写Mysql 

关闭Mysql A服务,让Mysql B 提供服务。

下面介绍具体的操作步骤,此文的Mysql 服务都部署在 Centos 6.3(x64) 系统上,Mysql A 版本为:5.1.73  ,Mysql B、C、D 版本为 5.6.X

操作步骤:

1.对Mysql A进行全量备份并恢复到Mysql B:

安装xtrabackup(机器A、B上)   

wget http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpmyum install -y  percona-release-0.1-3.noarch.rpm#percona 的官方源很慢,很大概率会出现下载失败,多试几次就好,下载是自动支持断点重试的yum install -y percona-xtrabackup-20.x86_64

设置 的mysql 账号replication(机器A),之所以在备份前设置是因为Mysql版本5.1 和5.6 的版本在同步 user不兼容(如果你不需要对mysql 的系统库进行同步,此步可以在后面进行)

#使用有权限的mysql账号(如 root)创建replication 账号grant replication slave on *.* to slave@'%'  identified by "123";

全量备份(机器A)

innobackupex /home/mysql/backups/ --user=root --password=123

恢复备份(机器A)

innobackupex --apply-log --use-memory=40G /home/mysql/backups/2019-11-15_20-04-14/

拷贝文件(机器B)

#使用rsync 从机器B将通过xtrabackup恢复好的备份文件同步到机器B上#rsync 相关使用方法可以自己baidu或者google,注意这里两个目录的 “/”#这里的hostA为机器A的hostname或者iprsync -avz --progress hostA:/home/mysql/backups/2019-11-15_20-04-14 ~mysqld/backup/#根据你自己的mysql 配置文件路径进行调整innobackupex --defaults-file=/etc/mysql/my.cnf --copy-back ~mysqld/backup/2019-11-15_20-04-14/

改变文件属主(机器B)

#根据自己的mysql data 的配置进行调整chown -R mysqld:mysqld ~mysqld/var/lib/mysql

mysql 关键配置项(机器B)

#server-id 要比机器A的小,比机器C、D上大server-id = 10#开启二进制日志,目录根据自己的机器进行调整log-bin=/home/disk2/mysqld_bin_log/mysql-bin#开启通过replication也产生二进制日志的选项,以便机器C、D上的Mysql可以从机器B上同步数据log_slave_updates=1

启动Mysql服务(机器B)

#你的mysql要是通过yum 安装的可以通过service 方式其他,否则直使用命令行的方式启动service mysqld start

查看master 相关信息(机器B),在后面设置Mysql B 的从库需要用到,这个时候不要有任何对 Mysql B的写操作

#登录mysql 后执行show master status ;

# 输出如下示例,需要记下对应的 log file 和log pos ,开启replication后会变化# mysql-bin.000001  120

查看机器A上Mysql bin 日志位置

#在备份目录的xtrabackup_binlog_info 文件中,

cat  ~/mysqld/backup/2019-11-15_20-04-14/xtrabackup_binlog_info

#下面是我这边的输出示例,需要根据自己的文件输出进行配置下面的步骤

# mysql-bin.001150  611640010 

设置mysql replication (机器B)

#登录mysql 后执行,需要有对应权限,这个时候机器B上的mysql 用户和机器Amysql用户一致#相关参数需要根据自己的配置进行调整,这里仅仅是示例change master to master_host="hostA", master_port=3306, master_user='replication', master_password='123', master_log_file='mysql-bin.001150', master_log_pos=611640010;#启动 replicationstart slave ;#查看replication 的状态show slave status \G

若slave status 输出下面两个字段都Yes,说明已经开始进行Mysql的内容同步了,若是有错误需要根据错误提示进行排查。

Slave_IO_Running: YesSlave_SQL_Running: Yes

2. 在机器C、D上配置Mysql B 的从库

将之前机器A的备份文件分别拷贝到机器C、D,并分别启动mysql 服务  (不再命令,参看上面)

设置replication(机器C、D), 这里的master_log_file 和 master_log_pos 是从Mysql B 启动的时候通过 show master status \G 命令获取的

#登录mysql 后执行,需要有对应权限,这个时候机器B上的mysql 用户和机器Amysql用户一致#相关参数需要根据自己的配置进行调整,这里仅仅是示例changemastertomaster_host="hostB", master_port=3306, master_user='replication', master_password='123', master_log_file='mysql-bin.000001', master_log_pos=120;#启动 replicationstartslave;#查看replication 的状态showslavestatus\G

部署 mysql router:

从mysql 官网(https://dev.mysql.com/downloads/router/)下载 mysql router 

下面给出mysql router 关键配置项,并启动mysql router

[routing:unit1]bind_address                    =0.0.0.0:8563connect_timeout                =2# 一定是这个模式mode                            =read-writemax_connections                =2000max_connect_errors              =10000client_connect_timeout          =2# 需要根据自己的配置进行调整destinations                    =hostA:portA,hostB:portB

修改所有业务访问mysql A 入口 到 mysql router 入口,并验证可用性

切换Mysql A 到 Mysql B上

确认MySQL B 和 Mysql A 同步无延迟

msyql>show slave status \G#查看 Seconds_Behind_Master 字段,值为0表示同步无延迟

直接关闭Mysql A服务

 service mysqld stop

关闭Mysql B 上的replication

msyql>stop slave ;

相关文章

网友评论

      本文标题:Mysql 服务迁移

      本文链接:https://www.haomeiwen.com/subject/vxsbgctx.html