奇矩互动官方论坛's Archiver

Edwin 发表于 2008-4-6 17:47

mysql的master-slave配置

假设有两台服务器A,B
服务器A : freebsd6.1 mysql-4.1.20  IP : 192.168.0.101
服务器B : freebsd6.1 mysql-4.1.20  IP : 192.168.0.102
目标 : 在服务器B上实现对服务器A上数据库的主从复制(例如: test1)
过程如下:
[服务器A] 为主服务器
修改 my.cnf文件,确保开启 log-bin
建立备份帐号backup,并授权
mysql>grant usage on *.* to ‘backup’@'host-B’ identified by ‘passwd’;
mysql>grant all on db_name.* to ‘backup’@'host-B’ identified by ‘passwd’;
mysql>grant replication slave on *.* to ‘backup’@'host-B’ identified by ‘passwd’;
重起服务器A的mysql
[服务器B] 为从服务器
按下面的例子 修改 my.cnf文件
server-id       = 2
master-user=backup
master-password=passwd
master-port=3306
master-host=192.168.0.101
master-connect-retry=60
replicate-do-db=db_name
replicate-wild-do-table=db_name.%
*说明 replicate-do-db 指定同步数据库, replicate-wild-do-table 指定同步表,但是如果后者支持跨库更新
同样,要在服务器B上对backup帐号授权
mysql>grant usage on *.* to ‘backup’@'localhost’ identified by ‘passwd’;
mysql>grant all on db_name.* to ‘backup’@'localhost’ identified by ‘passwd’;
在服务器B上建立你所要同步的数据库,注意保持字符集的一致性
然后重起服务器B的mysql
可以按这样启动 sudo /path/to/mysql/bin/mysqld_safe –user=mysql –skip-slave-start &
–skip-slave-start 表示启动时跳过slave,这样可以在确保没问题后再开启slave进行同步,避免不必要的麻烦.
备份服务器A上所要同步的数据库
我采用的是mysqldump方式
如果大多是innodb的表 /path/to/mysql/bin/mysqldump -uroot –opt –master-data=1 –single-transaction db_name > db_name.sql
–single-transaction 会在备份前对数据库加一个”短时间”的全局锁定, –master-data=1 该选项将二进制日志的位置和文件名写入到输出中
对于myisam表 只要 /path/to/mysql/bin/mysqldump -uroot –opt –master-data=1  db_name > db_name.sql 即可
用备份文件在服务器B上恢复出一个库来,然后 mysql>show slave status; 检查服务器状态,如果某些值不符合实际情况,则可用下面的方法进行调整:
mysql> CHANGE MASTER TO
->     MASTER_HOST=’master_host_name’,
->     MASTER_USER=’replication_user_name’,
->     MASTER_PASSWORD=’replication_password’,
->     MASTER_LOG_FILE=’recorded_log_file_name’,
->     MASTER_LOG_POS=recorded_log_position;
调整完毕启动slave, mysql> start slave;
然后 mysql>show slave status; 检查服务器状况, Slave_IO_State 字段为 Waiting for master to send event 说明能够正常同步了,可以在服务器A上插入一条数据,然后到服务器B上检查.

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.