MySQL 5.5 主从复制配置

 第一步:确认主从服务器的 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;
 
2. 获取主服务器的二进制文件名和位置
 
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='slavepass', -> MASTER_LOG_FILE='mysql-bin.000001', -> MASTER_LOG_POS=0;

 

此处制定 MASTER_LOG_POS  的值为 0 ,因为要从日志的开始位置开始读。也可以在语句 SHOW MASTER STATUS 显示中的文件位置开始读。只需把主服务器现在的数据库快照复制到从服务器

使用 mysqldump 创建数据快照

1. 打开主服务器 MySQL 客户端
 
mysql> FLUSH TABLES WITH READ LOCK;
 
2. 打开一个新的 DOS 窗口,用 mysqldump 创建转储,可以是你要复制的所有数据库,也可以是单个数据库
 
shell> mysqldump --all-databases --lock-all-tables >dbdump.db
 
   还有一种方法是用裸转储,用 --master-data 选项,在从服务器启动复制进程的时候会自动添加 CHANGE MASTER TO 语句。
 
shell> mysqldump --all-databases --master-data >dbdump.db
 
3. 在 MySQL 客户端输入以下命令来解锁
 
mysql> UNLOCK TABLES;
 
 使用复制原始文件创建数据快照
 
   如果你的数据库很大,复制数据库的原始文件会比用 mysqldump 的效率高。

   
   如果你主从服务器的系统变量 ft_stopword_file, ft_min_word_len 或者 ft_max_word_len 有差异,在复制那些有全文索引的表也会出现问题。

第八步:查看从服务器的设置是否准确。

使用 SHOW SLAVE STATUS 语句查看从服务器的设置是否准确。

第九步:执行 START SLAVE 语句开始复制。

mysql> START SLAVE;

 

 
在主服务器上,可以看到从服务器的 I/O 线程创建的连接:
mysql> show processlist\G
 

猜你喜欢

转载自wangzq-phper.iteye.com/blog/2358543