Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2823994
  • 博文数量: 200
  • 博客积分: 2413
  • 博客等级: 大尉
  • 技术积分: 3067
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-01 22:07
文章分类

全部博文(200)

文章存档

2018年(2)

2017年(8)

2016年(35)

2015年(14)

2014年(20)

2013年(24)

2012年(53)

2011年(44)

分类: Mysql/postgreSQL

2011-08-12 15:58:07

首先要说的一点是,在生产环境中配置AB复制的难度要比实验环境大的多,这是我意料之外的。通过这次部署集群,经验增长不少。
 
由于涉及到敏感信息,所以数据库名 ip等地方都做了相应修改。
 
先说一下配置环境:
master库已经在生产状态,数据大概十几个G;ip:192.168.1.101
slave库是全新mysql数据库;ip :192.168.1.102
需要将master库中的db1和db2两个库同步到slave库中。
 
在正式部署之前,已经在测试机上配置成功,且写好了部署步骤和注意事项(这是我的习惯,有部署文档步骤就不会乱,心里也有底)
 
=========================================================================================
下面是部署步骤:
 
凌晨1:20 修改master库配置信息
  1. ----------vim /etc/my.cnf------------
  2. log_bin=mysql-bin --开启二进制日志
  3. server_id=1 --服务id
  4. -----------------------------------------

1:25 重启master mysql数据库

1:40 创建创建replication用户slave

  1. >grant replication slave on *.* to slave@192.168.1.102 identified by 'slave';

1:42 锁master库所有表,变为只读状态

  1. >flush tables with read lock;
  2. >show master status; --记录二进制日志的file值和Position值
  3.  mysql-bin.000023 | 6632048  --注意这两个值,在配置slave库的时候很重要!

1:45 开始备份master 上的db1和db2库

  1. mysqldump -uroot -ppasswod -B db1 db2 --lock-all-tables >/var/2db_back.sql
  2. mysqldump: Got error: 1040: Too many connections when trying to connect

报连接数太多的错误,开来连接数量已经达到上限了,多执行几次备份命令,终于开始备份

  1. mysqldump -uroot -ppasswod -B db1 db2 --lock-all-tables >/var/2db_back.sql

2:03 备份完成,一共23G,一切正常!

2:04 解除master 上的只读锁

  1. UNLOCK TABLES;

下面是从库部署过程

2:10 登陆到slave库所在服务器,从master库所在服务器下载db1和db2的备份

3:36 备份传递完成,传输备份文件期间眯瞪了一会儿,夜里干活累啊

3:40 测试从库replication 用户slave是否能从slave连接到master库

  1. >mysql -uslave -pslave -h 192.168.1.101

连接通过!

3:45 将主服务器的数据库导入到从服务器

  1. # mysql -uroot -p

导入过程实在漫长,肚子开始咕咕叫,吃上两块糕点慰藉俺的肚子!在这里非常感谢老妈,老妈知道我晚上要加班,提前给我买好了糕点。

等待导入完成的光标闪啊闪,我的眼皮却开始打架,困意来袭,实在熬不住了,定好4:40的闹铃,倒头便睡。

4:40 被闹铃准时叫醒,导入依然没有完成,洗把脸精神一下。

导入过程中配置slave的my.cnf文件,并行工作,提高效率,嘿嘿

  1. [mysqld]
  2. server-id=2
  3. master-host=192.168.1.101 master-port=3306
  4. master-user=slave
  5. master-password=slave
  6. replicate-do-db=db1
  7. replicate-do-db=db2
  8.  replicate-do-db 这个参数指定同步的数据库,如果想同步两个库就写两个replicate-do-db参数!

5:51 数据终于全部导入到slave库!

5:56 重启slave库

  1. serive mysqld restart

重启正常

查看主库状态,正常!

关键时刻马上到来

6:02 停止slave数据同步

  1. >stop slave;

6:05 指定slave库开始同步的file值和Position值,这个很关键!

  1. >change master to master_log_file="mysql-bin.000023",master_log_pos=6632048

启动slave同步

  1. >start slave;

激动的时候到了,

查从库的同步进程是否运行正常

  1. show master stauts\G
  2.   Slave_IO_Running: Yes --成功!
      Slave_SQL_Running: Yes --成功!
      Slave_IO_State: Waiting for master to send event --成功!!

最后要验证了

在master库的db1和db2中分别创建不同的两个表,然后在slave库中查看新建的两个表是否同步过来。查看后存在!

继续,通过对比master 和slave的Position值判断数据是否同步成功

过程如下

  1. master 库:
  2. >flush tables with read lock;
  3. >show master status;
  4. 获得postion 值
  5. slave 库:
  6. show slave status\G
  7. 获得Read_Master_Log_Pos值,

经过查看,值是一样的!我成功了!!!

一看时间,已经是6:40!一夜的辛苦没有白费!

打算眯瞪会儿,一会儿再看看数据同步是否正常。

==================

等我起来已经是7:30,在slave库上show slave status\G ,傻眼了,提示我由于我在master库长期锁表,造成从库等待主库的同步数据过长,同步失败!

我赶紧在master库执行unlock tables

这时slave库显示connecting master,一直在连接主库

大概过了10分钟还是这样

我脑子里突然想到是不是连接数紧张造成的,比较已经快早晨8点了,数据库的压力开始攀升

通过

  1. >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库成功!!!

再次验证同步是否正常,一切正常!!!

终于部署完成!

 

 

 

阅读(2322) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~