2010年12月17日星期五

Mysql5一主库两从库同步配置(转)

一、安装包选择
mysql-5.0.67.tar.gz  (安装在主库机:server1
mysql-5.0.45.tar.gz  (安装在从库机:server2
MySQL-client-community-5.0.67-0.sles10.i586.rpmMySQL-server-community-5.0.67-0.sles10.i586.rpm  (安装在从库机:server3
最好使用同一版本的安装包。在这里只是想试验一下。
二、安装环境
192.168.100.188  RHEL5.1  数据文件的存放位置/usr/local/mysql5/var
待同步数据库juwangtest 
192.168.100.39   CentOS5.2  /usr/local/mysql/var
192.168.100.15   OpenSuSE11  /var/lib/mysql
rpm包在suse下的mysql服务启动:/etc/init.d/mysql  start
在源码包安装在CentOSRHEL5.1mysql服务分别为:
/usr/local/mysql/bin/mysqld_safe –user=mysql &
/usr/local/mysql/bin/mysqld_safe –user=mysql &
停止服务:bin/mysqladmin shutdown
三、主服务器配置
1)建立用户
grant  replication  slave .  *.*  to  slave1@192.168.100.39  identified by '123456';
grant  replication  slave .  *.*  to  slave2@192.168.100.15  identified by '123456';
flush  privileges;
2)修改my.cnf
vi  /etc/my.cnf
server-id = 1
log-slave-updates
binlog-do-db=juwang 
ç关于复制的数据库一定要分开写。不能写成binlog-do-db=juwang,test。这是无效的,两个数据库一个都不会复制。
binlog-do-db=test
binlog-ignore-db=mysql
3锁主库表
mysql> FLUSH TABLES WITH READ LOCK;
4显示主库信息
SHOW MASTER STATUS;
5另开一个终端,打包主库
cd  /usr/local/mysql5/var
tar  czvf  juwang.tar.gz  juwang
四、设置SLAVE
1)传输主库压缩包、解压
cd  /usr/local/mysql/var
scp  /usr/local/mysql5/var/juwang.tar.gz .
tar  xf  juwan.tar.gz
2)解锁主库表
mysql> UNLOCK TABLES;
3查看修改juwang文件夹权限
# chown mysql:mysql juwang –R
4修改my.cnfCentOS
replicate-do-db=test
log-slave-updates
修改my.cnfSuSe
server-id=3  ç千万别和其它机器的server-id号写重名了。
master-host=192.168.100.188
master-user=slave2
master-password=123456
master-port=3306
replicate-do-db=juwang
replicate-do-db=test
log-slave-updates
 
5验证连接MASTER
 
# mysql -h192.168.100.188 –uslave2 –p123456
mysql> show grants for slave1@192.168.100.39;
 
6SLAVE上设置同步
设置连接MASTER MASTER_LOG_FILE为主库的FileMASTER_LOG_POS为主库的Position
============================
mysql> CHANGE MASTER TO MASTER_HOST='192.168.100.188',MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000005',MASTER_LOG_POS=98;
============================
7启动SLAVE服务
mysql> slave start;
查看SLAVE状态
mysql> SHOW SLAVE STATUS\G;
其中 Slave_IO_Running Slave_SQL_Running 两列的值都为 "Yes",表明 Slave I/O SQL 线程都在正常运行。
到此主从库搭建成功。

在配置过程中出现:Slave_SQL_Running 的值都为 "No"
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: No
Last_Errno: 1062
 
原因:
1.程序可能在slave上进行了写操作 。(我确定这样操作过。)
2.也可能是slave机器重起后,事务回滚造成的.
 
解决办法I
1.首先停掉Slave服务:slave stop
到主服务器上查看主机状态:
记录FilePosition对应的值。
3.slave服务器上执行手动同步:
mysql> show master status;
在从库机上操作如下:
注意:
/etc/init.d/mysql start SuSe中),应这样启动服务:/etc/init.d/mysql  --skip-slave-start
mysql> change master to
> master_host='master_ip',
> master_user='user',
> master_password='123456',
> master_port=3306,
> master_log_file='mysql-bin.000006',
> master_log_pos=98;
1 row in set (0.00 sec)
mysql> slave start;
1 row in set (0.00 sec)
 
再次查看slave状态发现:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
Seconds_Behind_Master: 0
解决办法II
mysql> slave stop;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;
 
解决办法III
重新获取主库上的数据库相关物理文件,然后,再拷贝到从库的相应的位置。重复上述有关操作。
 
在启动从库机mysql服务器时出现了,启动mysqld_safe的时候遇到这个错误:Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
data删除之后mysql_install_db --user=mysql就行了

摘自:http://sqlnet.blog.51cto.com/343343/102980

没有评论: