【MySQL运维】线上MySQL数据库离线停服迁移流程

TangLu MySQL 2020-02-08 3290 0

业务方允许停服2小时进行离线迁移,所以选在凌晨1点进行操作


1、停止Nginx服务,并且修改数据库用户密码,防止还有新的连接进来  

 

2、杀掉用户进程,防止已经建立连接的用户还在进行数据写入

#杀掉所有已经建立的连接
mysqladmin -uroot -p processlist|awk -F "|" '{print $2}'|xargs -n 1 mysqladmin -uroot -p kill
#杀掉指定用户建立的连接,比如tanglu
mysqladmin -uroot -p processlist|awk -F "|" '{if($3 == "tanglu")print $2}'|xargs -n 1 mysqladmin -uroot -p kill

#杀掉用户进程的另一个方法,推荐
# SELECT CONCAT('kill ',id,';') FROM information_schema.`processlist` #导出成SQL,然后再source
# SELECT CONCAT('kill ',id,';') FROM information_schema.`processlist` WHERE `user` != 'system user'

3、开发人员记录源库数据


4、采用Innodbbackup对需要的数据库做物理备份。需要备份的数据库信息:A库94G、B库460M。另还需对mysql、performance_schema这2个库做备份,此为mysql服务默认库,保存有用户权限等信息,恢复时需要用到。如果不备份这2个库,数据还原后启动服务会报错Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist。备份命令如下:

time innobackupex --defaults-file=/etc/my.cnf  --databases="mysql performance_schema database_a database_b" --user=dba --password=PASSWORD /data/backup/


5、将数据传输到新服务器,这2台机器随后会部署为主从模式

scp -r /data/backup/2018-12-05_11-59-45/  root@10.3.0.224:/data/backup/
scp -r /data/backup/2018-12-05_11-59-45/  root@10.3.0.225:/data/backup/



6、暂停目标服务器已经提前搭建好的MySQL 3310实例,清空数据目录,重新初始化,准备还原

mysqladmin -udba -p -S /tmp/mysql3310.sock shutdown  #停止新实例的服务
rm -rf /data/mysql3310 /data/dblog/mysql3310 /etc/my3310.cnf  #删除数据和配置
/usr/local/shell/mysql_multi_install.sh  #这是只是一个初始化脚本
mysql -uroot -p`cat /data/mysql3310/passwd.txt` -S /tmp/mysql3310.sock
alter user root@'localhost' identified by 'PASSWORD';
grant all privileges on *.* to 'dba'@'%' identified by 'PASSWORD' with grant option;
grant all privileges on *.* to 'dba'@'localhost' identified by 'PASSWORD' with grant option; 
mysqladmin -udba -p -S /tmp/mysql3310.sock shutdown  #初始化完毕后再次停止服务准备还原数据

7、备份数据还原
rm -rf /data/mysql3310/*
innobackupex --defaults-file=/etc/my3310.cnf --apply-log /data/backup/2018-12-05_11-59-45/
innobackupex --defaults-file=/etc/my3310.cnf --copy-back /data/backup/2018-12-xx_xx-xx-xx/
chown -R mysql. /data/mysql3310

8、启动服务

 mysqld_safe  --defaults-file=/etc/my3310.cnf &


9、服务迁移后使用了新域名,只需要做好解析即可,然后启动Nginx观察服务

评论