第一步:确认主从服务器的 MySQL 版本。
MySQL 不同版本的 BinLog 格式可能不一样,最好采用相同版本。如果达不到要求,必须保证主服务版本不高于从服务器版本。用 mysql -V 命令查看。
第二步:在主服务器上为从服务器设置一个连接帐号,授予 REPLICATION SLAVE 权限。
每个从服务器使用标准 MySQL 用户名和密码连接主服务器。假定域为 mydomain.com,要创建用户名为 “repl” 的账户,从服务器使用该账户从域内任何主机使用密码 “pass4slave” 访问主服务器。创建该账户使用 GRANT 语句:
mysql>CREATE USER 'repl'@'%
.mydomain.com
' IDENTIFIED BY 'slavepass';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.mydomain.com';
第三步:配置主服务器。
打开二进制日志,制定唯一 Server ID。例如,在 my.cnf 配置文件中加入如下值:
[mysqld]
log-bin = mysql-bin
server-id = 1
第四步:重启主服务器。
1. 打开主服务器 MySQL 客户端,执行下面的 SQL 语句来防止 MySQL 的写操作
mysql> FLUSH TABLES WITH READ LOCK;
mysql > SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 73 | | | +------------------+----------+--------------+------------------+
File 表示主服务器正在使用的 binlog 文件;Position 的值与 binlog 文件的大小相同,表示下一个被记录事件的位置;Binlog_Do_DB 和 Binlog_Ignore_DB 是主服务器控制写入 binlog 文件内容的过滤选项,默认为空,表示不做任何过滤。
File 和 Position 两个字段指明从服务器将从哪个 binlog 文件中复制,以及复制的开始位置,它们也是 CHANGE MASTER TO 语句的参数。
第五步:配置从服务器。
从服务器的配置与主服务器类似,必须提供一个唯一 Server ID(不能跟主服务器 ID 相同),配置完毕后同样需要重启MySQL 服务器,配置如下:
[mysqld]
log-bin = mysql-bin
server-id = 2
第六步:启动从服务器。
接下来让从服务器连接主服务器,并开始重做主服务器 binlog 文件中的事件。
第七步:启动主服务器信息。
使用 CHANGE MASTER TO 语句制定主服务器的信息,不要在配置文件中设置。该语句可以替代在配置文件中提供主服务器的信息,另外,不需要停止服务器,便可以为从服务器指定不同主服务器,语句如下
mysql>CHANGE MASTER TO
->MASTER_HOST='
->192.168.1.100
',MASTER_USER='repl',
->MASTER_PASSWORD='slave
->pass
',MASTER_LOG_FILE='
->mysql-bin.000001
',MASTER_LOG_POS=
0
;
此处制定 MASTER_LOG_POS
的值为 0 ,因为要从日志的开始位置开始读。也可以在语句 SHOW MASTER STATUS 显示中的文件位置开始读。只需把主服务器现在的数据库快照复制到从服务器
使用 mysqldump 创建数据快照
mysql> FLUSH TABLES WITH READ LOCK;
shell> mysqldump --all-databases --lock-all-tables >dbdump.db
shell> mysqldump --all-databases --master-data >dbdump.db
mysql> UNLOCK TABLES;
如果你主从服务器的系统变量 ft_stopword_file, ft_min_word_len 或者 ft_max_word_len 有差异,在复制那些有全文索引的表也会出现问题。
第八步:查看从服务器的设置是否准确。
使用 SHOW SLAVE STATUS 语句查看从服务器的设置是否准确。
第九步:执行 START SLAVE 语句开始复制。
mysql> START SLAVE;