mysql version:5.1.56

master:192.168.110.2

slave:192.168.110.10


在master上赋予权限

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.110.10' IDENTIFIED BY 'slavepass';

备份你需要复制的数据库

mysqldump -u -p -h127.0.0.1 --master-data  test  >test.sql

配置从服务器,确保分配一个唯一的ID号并启动服务器

server-id=2

replicate-wild-do-table = test.%  需要同步的数据库,如果没有定义,则同步所有

replicate-wild-ignore-table = %.% 忽略其它数据库的同步

log-bin=mysql-bin

master-host=192.168.110.2

master-user=repl

master-password=slavepass

在从服务器上执行test.sql

在从服务器上执行slave start

如果没有配置master-host/master-user/master-password

需执行

CHANGE MASTER TO

                ->     MASTER_HOST='master_host_name',
                ->     MASTER_USER='master_user_name',
                ->     MASTER_PASSWORD='master_pass',
                ->     MASTER_LOG_FILE='recorded_log_file_name', 在test.sql中提供
              ->     MASTER_LOG_POS=recorded_log_position;       在test.sql中提供

就OK了


注:这里最主要的是--master-data参数,这个会记录当前master的二进制日志名和偏移量

问题:当备份的数据库很大并且有持续的数据写入时会不会出错?

例如当前备份数据库4G,持续写入。二进制日志名 mysql-bin.000016 偏移量 12456

此时使用mysqldump备份数据库,记录二进制日志名和偏移量,由于有数据写入,会不会有些备份的数据对应的二进制日志名和偏移量就不是记录的,比如是 mysql-bin.000016 12556

此时就会造成复制问题。

解决方法:在备份时加上read lock,但会防止数据的写入


某些从服务器复制选项按特殊方式处理,当从服务器启动时如果master.info文件存在并且包含选项值,它们将被忽略掉。master.info优先于my.cnf,配置下面的选项按这种方式处理:

·         --master-host

·         --master-user

·         --master-password

·         --master-port

·         --master-connect-retry

·         --master-ssl

·         --master-ssl-ca

·         --master-ssl-capath

·         --master-ssl-cert

·         --master-ssl-cipher

·         --master-ssl-key

这时只能使用change master to语句