在不停止主服务器下配置从服务器
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-do-db=test 需要同步的数据库,如果没有定义,则同步所有
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,但会防止数据的写入
相关阅读: