日期:2014-05-16 浏览次数:20788 次
一、 MySQL复制的实现原理
?MySQL支持单向、双向复
制、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入一个二进制日志文件中,并创建一个索引文件以
跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,日志文件会通知主服务器,从服务器在日志中读取的最后一次成功更新
的位置。接着,从服务器在上次成功更新的位置处开始进入更新操作。更新完成后从服务器开始进入等待状态,等待主服务器后续的更新。
???????? 本文讲解的环境为:一个mysql的master主节点node1,三个Mysql的Slave节点,三个Slave节点都从primary节点进行实时的同步数据,Mysql高可用集群主机信息如图1所示:
?
图1
三、在node1、slave1、slave2、slave3上安装MYSQL
安装MySQL有多种方法,这里仅以rpm安装为列说明。
[root@node1~]#yum -y install mysql-server mysql-devel mysql mysql-bench mysql-test
安装完成后,使用如下命令启动mysql服务:
[root@node1 ~]# /etc/init.d/mysqld start
为了保障数据安全,建议把数据放到专业的存储设备或者磁盘阵列分区,这里假定磁盘阵列的分区为/data目录,接着把数据文件放到/data目录下:
[root@node1 ~]# cp -R /var/lib/mysql /data/mysql
[root@node1 ~]# chown –R mysql:mysql /data/mysql
修改/etc/my.cnf文件,在[mysqld]组增加如下配置:
datadir = /data/mysql
最后,重启MySQL服务即可。
四、在Mysql主节点node1上编辑配置文件my.cnf
编辑主服务器的配置文件/etc/my.cnf,在[mysqld]中添加如下内容即可:
server-id = 1?? #服务器ID。服务器之间不能有重复ID,一般master是1
log-bin=mysql-bin?? #打开mysql的binlog功能,后面的名字可以自己指定,如果不改名字的话,默认是以主机名字命名
binlog-do-db=ixdba?#ixdba是需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可
binlog-ignore-db=mysql?#不需要备份的数据库名称,如果需要忽略备份多个数据库,重复设置这个选项即可。
五、在master节点node1上建立复制用
户
mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'
IDENTIFIED BY 'repl_password';
这里一定将repl_user用户设置为远程任意节点可以登录。
六、备份Master数据
备份Master上的数据,首先执行如下SQL语句:
mysql>FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
mysql> reset master;
Query OK, 0 rows affected (0.00 sec)
七、设置Slave主机
编辑/etc/my.cnf文件,在[mysqld]中添加如下内容即可:
server-id = 2
log-bin=mysql-bin
binlog-do-db=ixdba
binlog-ignore-db=mysql
其他的Slave以此类推,保证server-id全局唯一即可。
八、 在slave上执行如下命令
mysql> CHANGE MASTER TO MASTER_HOST='192.168.12.135',
-> MASTER_USER='repl_user',
-> MASTER_PASSWORD='repl_password',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=98;
执行完之后执行:
mysql> slave start;
Query OK, 0 rows affected (0.00 sec)
mysql> show sla