2012年10月12日星期五

MySQL 5.5 复制配置

这里以 Windows 7 平台下 wamp  2.1 为例说明怎样配置 MySQL 的主从复制。

第一步:编辑主服务器 MySQL 的 my.ini 文件。


# Replication Master Server (default)
# binary logging is required for replication

log-bin=mysql-bin
# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted

server-id  = 1​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​


注意,上面的编辑应该是在 [wampmysqld] 节点下面进行编辑,如下图,然后按照下面的方式重启MySQL。


[wampmysqld] 节点
[wampmysqld] 节点



shell> mysqladmin -u root -p shutdown   #关闭MySQL
shell> mysqld --remove wampmysqld   #移除
wampmysqld 服务


shell> mysqld --install wampmysqld --binlog-do-db=test  #添加 wampmysqld 服务,并只对数据库 test 进行日志的操作。然后需手动在 控制面板\系统和安全\管理工具\服务 中启动 mysql

服务


第二步:编辑服务器 MySQL 的 my.ini 文件。


# required unique id between 2 and 2^32 - 1
# (and different from the master)
# defaults to 2 if master-host is set
# but will not function as a slave if omitted

server-id       = 2​​​​​​​​​​​​​​​​​​​​

同样的,上面的编辑也是在 [wampmysqld] 节点下面进行编辑,如下图,然后按照下面的方式安装 MySQL 服务。


shell> mysqladmin -u root -p shutdown   #关闭MySQL
shell> mysqld --remove wampmysqld   #移除
wampmysqld 服务
shell> mysqld --install wampmysqld   #安装为服务

第三步:专门为从服务器创建一个用户(可选)

打开主服务器MySQL客户端,输入以下命令:



mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'slavepass';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

第四步:获取主服务器二进制日志的坐标

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       | test         | manual,mysql     |
+------------------+----------+--------------+------------------+

    在主服务器,我们能够通过 --binlog-do-db and --binlog-ignore-db 选项来控制哪些数据库被记录入二进制日志。详情见:Binary Log Options and Variables

第五步:使用 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.在第1步的 MySQL 客户端输入以下命令来解锁

mysql> UNLOCK TABLES;


第六步:使用复制原始文件创建数据快照

   如果你的数据库很大,复制数据库的原始文件会比用 mysqldump 的效率高。
   
   如果你主从服务器的系统变量 ft_stopword_file, ft_min_word_len 或者 ft_max_word_len 有差异,在复制那些有全文索引的表也会出现问题。



第七步:在已经有数据的从服务器上启动复制


a. 用 --skip-slave-start 选项启动从服务器的MySQL,确保复制还没开始

shell> mysqld --skip-slave-start    #然后需手动在 控制面板\系统和安全\管理工具\服务 中启动 mysql


b. 导入转储文件

shell> mysql < fulldb.dump

6.设定从服务器复制相关配置

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;


7.启动从服务器的线程

mysql> START SLAVE;

没有评论:

发表评论