mysql主从配置和数据迁移

来源:互联网 发布:会议速记软件 编辑:程序博客网 时间:2024/06/01 17:38

前言

由于近期做的一个项目需要迁移服务器,其中包含了mysql的迁移,特开此贴记录一下mysql迁移的方法和流程。考虑到项目本身数据量不大,但是属于外网间的迁移,所以我的做法是先在新服务器启动一个mysql,作为从服务器,这样保持好两个服务器数据一致,在晚上某个点,再把新服务器mysql直接切换为主即可。

迁移步骤

我的环境为: Ubuntu + mysql5.5

假设mysql原来所在的服务器为a,新服务器为b,首先在a服务器进行如下操作:
1、修改 /etc/mysql/my.cnf 文件,打开 log_bin,同时开放 server_id,
即把类似如下两行代码注释去掉:
server_id=1
log_bin = /var/log/mysql/mysql-bin.log

2、重启msyql (service mysql restart),随便操作一下db,就会发现 /var/log/mysql 目录下生成了 mysql-bin.000001 这样的文件,
可以使用 mysqlbinlog –no-defaults mysql-bin.000001 查看文件中的内容,可以发现这里记录着我们对 mysql的所有更新操作语句,
这个操作日志文件还可以配置大小,时间等相关行为,请自行查阅。

3、 执行 : flush tables with read lock; 锁住所有的表,只允许读,不允许写,为备份数据作准备,也就是避免有脏数据。

4、执行:show master status; 记录下 File 和 Position 这两个信息,这个在主从同步时需要用到,我执行时的信息如下 :
mysql-bin.000002 4974577

5、使用 mysqldump 把所有的数据库一个一个导出来
mysqldump -u[user_name] -p[password] [database_name] > /mnt/data/db/[backup_name].dump

6、执行: unlock tables; 开放a服务器的mysql继续使用,这时候,a服务器mysql如果有写操作,都会一一记录到bin日志里面,这样
b服务器(从服务器)才不会丢失了中间一部分数据

7、把备份好的db文件scp到服务器b

8、开一个同步账号,用于后面的主从同步:
grant replication slave on . to ‘repl_test’@’114.67.62.246’ identified by ‘123456’;



接着,在b服务器进行如下操作:

1.、安装好mysql 并启动

2、建库: CREATE DATABASE [database_name] /!40100 COLLATE ‘utf8mb4_unicode_ci’ /
修改 /etc/mysql/my.cnf 文件,打开 log_bin,同时开放 server_id,即把类似如下两行代码注释去掉:
server_id=10 (不要跟a服务器的一样即可)
log_bin = /var/log/mysql/mysql-bin.log

3、重启mysql (service mysql restart)

4、导数据:
mysql -u[user_name] -p[password] [database_name] < [backup_name].dump

5、建用户并授权:
CREATE USER ‘user_name’@’%’ IDENTIFIED BY ‘password’;
GRANT ALL ON . TO ‘user_name’@’%’

6、这时候,b服务器的mysql数据已经跟a服务器差不多了,相差的小部分在a服务器的bin日志中,所以接下来要做的事情就是设置主从关系,并且把
缺失的数据进行同步, 达到两台服务器数据完全一致。
先执行 mysql > stop slave;
再执行:
mysql > change master to master_host = ‘a服务器ip地址’, master_user = ‘repl_test’, master_port=3306, master_password=’123456’, master_log_file = ‘mysql-bin.000002’, master_log_pos=4974577;

注意,上面的语句要指出主服务器,即a服务器的ip跟mysql端口,还有我们前面捕获到的 File 和 Position 信息,
再执行: mysql > start slave;
执行完毕后,a和b两台服务器mysql数据将会完全一致,并且形成了主从关系。

7、查询从服务器状态: mysql > show slave status\G
如果没有看到明显的错误提示,那应该就是成功了。

8、 在主库创建一张新表,添加一些数据,看看从库是否会同步。

9、 找一个时间点,停掉web业务,然后把b服务器mysql升级为主服务器:
mysql > stop slave; // 升级为主服务器
service mysql restart; // 如果发现有问题就重新启动,web如果有问题也重新启动。

总结

本次迁移比较简单,由于业务量不大,这样操作下来问题并不大,有需要的小伙伴可以试试。

0 0