首先要说的一点是,在生产环境中配置AB复制的难度要比实验环境大的多,这是我意料之外的。通过这次部署集群,经验增长不少。
由于涉及到敏感信息,所以数据库名 ip等地方都做了相应修改。
先说一下配置环境:
master库已经在生产状态,数据大概十几个G;ip:192.168.1.101
slave库是全新mysql数据库;ip :192.168.1.102
需要将master库中的db1和db2两个库同步到slave库中。
在正式部署之前,已经在测试机上配置成功,且写好了部署步骤和注意事项(这是我的习惯,有部署文档步骤就不会乱,心里也有底)
=========================================================================================
下面是部署步骤:
凌晨1:20 修改master库配置信息
- ----------vim /etc/my.cnf------------
- log_bin=mysql-bin --开启二进制日志
- server_id=1 --服务id
- -----------------------------------------
1:25 重启master mysql数据库
1:40 创建创建replication用户slave
- >grant replication slave on *.* to slave@192.168.1.102 identified by 'slave';
1:42 锁master库所有表,变为只读状态
- >flush tables with read lock;
- >show master status; --记录二进制日志的file值和Position值
- mysql-bin.000023 | 6632048 --注意这两个值,在配置slave库的时候很重要!
1:45 开始备份master 上的db1和db2库
- mysqldump -uroot -ppasswod -B db1 db2 --lock-all-tables >/var/2db_back.sql
- mysqldump: Got error: 1040: Too many connections when trying to connect
报连接数太多的错误,开来连接数量已经达到上限了,多执行几次备份命令,终于开始备份
- mysqldump -uroot -ppasswod -B db1 db2 --lock-all-tables >/var/2db_back.sql
2:03 备份完成,一共23G,一切正常!
2:04 解除master 上的只读锁
下面是从库部署过程
2:10 登陆到slave库所在服务器,从master库所在服务器下载db1和db2的备份
3:36 备份传递完成,传输备份文件期间眯瞪了一会儿,夜里干活累啊
3:40 测试从库replication 用户slave是否能从slave连接到master库
- >mysql -uslave -pslave -h 192.168.1.101
连接通过!
3:45 将主服务器的数据库导入到从服务器
导入过程实在漫长,肚子开始咕咕叫,吃上两块糕点慰藉俺的肚子!在这里非常感谢老妈,老妈知道我晚上要加班,提前给我买好了糕点。
等待导入完成的光标闪啊闪,我的眼皮却开始打架,困意来袭,实在熬不住了,定好4:40的闹铃,倒头便睡。
4:40 被闹铃准时叫醒,导入依然没有完成,洗把脸精神一下。
导入过程中配置slave的my.cnf文件,并行工作,提高效率,嘿嘿
- [mysqld]
- server-id=2
- master-host=192.168.1.101 master-port=3306
- master-user=slave
- master-password=slave
- replicate-do-db=db1
- replicate-do-db=db2
replicate-do-db 这个参数指定同步的数据库,如果想同步两个库就写两个replicate-do-db参数!
5:51 数据终于全部导入到slave库!
5:56 重启slave库
重启正常
查看主库状态,正常!
关键时刻马上到来
6:02 停止slave数据同步
6:05 指定slave库开始同步的file值和Position值,这个很关键!
- >change master to master_log_file="mysql-bin.000023",master_log_pos=6632048;
启动slave同步
激动的时候到了,
查从库的同步进程是否运行正常
- show master stauts\G
Slave_IO_Running: Yes --成功!
Slave_SQL_Running: Yes --成功!
Slave_IO_State: Waiting for master to send event --成功!!
最后要验证了
在master库的db1和db2中分别创建不同的两个表,然后在slave库中查看新建的两个表是否同步过来。查看后存在!
继续,通过对比master 和slave的Position值判断数据是否同步成功
过程如下
- master 库:
- >flush tables with read lock;
- >show master status;
- 获得postion 值
- slave 库:
- show slave status\G
- 获得Read_Master_Log_Pos值,
经过查看,值是一样的!我成功了!!!
一看时间,已经是6:40!一夜的辛苦没有白费!
打算眯瞪会儿,一会儿再看看数据同步是否正常。
==================
等我起来已经是7:30,在slave库上show slave status\G ,傻眼了,提示我由于我在master库长期锁表,造成从库等待主库的同步数据过长,同步失败!
我赶紧在master库执行unlock tables。
这时slave库显示connecting master,一直在连接主库
大概过了10分钟还是这样
我脑子里突然想到是不是连接数紧张造成的,比较已经快早晨8点了,数据库的压力开始攀升
通过
- >mysql -uslave -pslave -h 192.168.1.101
确实报错,显示 Error: 'Too many connections' ,看来真是连接数消耗完了。
我只有等待连接数有空闲了才能让slave库连接到master库。
以后操作一定要细心,一个小小的细节就造成这么大的失误。
过了8:30,再次在slave库上执行show slave status\G 命令,发现没有状态都正常了!!
在master库上执行> SHOW PROCESSLIST;命令查看连接数,确实下降不少,怪不得slave库连接master库成功!!!
再次验证同步是否正常,一切正常!!!
终于部署完成!
阅读(1528) | 评论(0) | 转发(0) |