复制主库要步骤:
注意:此方案中master_log_file和master-log_pos也和slave中一样,指向主库。
从主库复制会造成主库Master一定时间段锁表,这段时间会影响主库的使用。直接从从库进行复制,就不会对主库产生影响了。
但是,从从库复制要保证的是复制过程中从库上的数据不会发生变化,所以要先停掉从库。
略,参考《002.MySQL高可用主从复制部署》。
1 [root@Slave02 ~]# yum list installed | grep mysql #查看是否存在其他MySQL组件 2 [root@Slave02 ~]# yum -y remove mysql-libs.x86_64 #为避免冲突引发报错,卸载已存在的组件 3 [root@Slave02 ~]# wget http://mirrors.ustc.edu.cn/mysql-repo/mysql-community-release-el6-5.noarch.rpm 4 [root@Slave02 ~]# rpm -ivh mysql-community-release-el6-5.noarch.rpm 5 [root@Slave02 ~]# yum install mysql-community-server -y 6 [root@Slave02 ~]# chkconfig --list | grep mysqld #查看MySQL是否加入启动项 7 [root@Slave02 ~]# chkconfig mysqld on
1 [root@Master ~]# service mysqld start 2 [root@Master ~]# mysql_secure_installation 3 [root@Master ~]# service iptables stop 4 [root@Master ~]# chkconfig iptables off
提示:建议采用yum localinstall下载到本地进行安装。
1 [root@Master ~]# mysql -uroot -px120952576 2 mysql> flush tables with read lock; #锁定主库的表 3 mysql> show master status\G
File: mysql-bin.000003
Position: 12
1 [root@Master ~]# mysqldump -R -u root -p mysqltest >/tmp/mysqltest.sql 2 Enter password:
1 [root@Master ~]# mysql -uroot -px120952576 2 mysql> unlock tables;
1 [root@Master ~]# scp /tmp/mysqltest.sql root@172.24.8.20:/tmp
在Master主服务器上继续创建库mysqltest02并插入相应数据:
1 [root@Master ~]# mysql -uroot -p 2 Enter password: 3 mysql> create database mysqltest02; 4 mysql> use mysqltest02; 5 mysql> create table user02(id int(5),name char(10)); 6 mysql> insert into user02 values (00002,‘lisi‘); 7 mysql> grant replication slave on *.* to ‘repl_user‘@‘172.24.8.%‘ identified by ‘x12345678‘;
提示:主库继续创建新库用于验证slave02是否能正常复制,同时必须注意赋权给slave02。
1 [root@Slave02 ~]# vi /etc/my.cnf 2 [mysqld] 3 server-id=3 4 log-bin=mysql-bin 5 relay_log=mysql-relay-bin 6 log_slave_updates=1 7 read_only=1 8 [root@Slave02 ~]# service mysqld restart
解释:
server_id:服务器的标识符,唯一值,不能跟从服务器重复
log-bin=mysql-bin:开启 binlog日志
relay_log:开启复制日志,relay-log日志记录的是在复制过程中,从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后SQL线程会读取relay-log日志的内容并应用到从服务器。
1 [root@Slave02 ~]# mysql -uroot -px120952576 2 mysql> create database mysqltest; 3 mysql> use mysqltest; 4 mysql> source /tmp/mysqltest.sql; 5 mysql> select * from mysqltest.user; #查看验证
1 [root@Slave02 ~]# mysql -uroot -px120952576 2 mysql> change master to master_host=‘172.24.8.10‘, 3 master_user=‘repl_user‘, 4 master_password=‘x12345678‘, 5 master_log_file=‘mysql-bin.000003‘, 6 master_log_pos=120; 7 mysql> start slave;
提示:
证常状态下,看到上面的两行加粗处,即Slave_IO_Running和Slave_SQL_Running的参数都为 Yes,就说明主从同步运行正常。
1 [root@Slave ~]# mysql -uroot -px120952576 2 [root@Slave02 ~]# mysql -uroot -px120952576 3 mysql> select * from mysqltest02.user02; 4 #两台slave上均验证master第二次创建的测试库是否正常复制过来。
1 [root@Slave ~]# mysql -uroot -px120952576 2 mysql> stop slave; 3 mysql> show slave status\G
记录以下两项:
Relay_Master_Log_File: mysql-bin.000003
Exec_Master_Log_Pos: 932
1 [root@Slave01 ~]# mysqldump -R -u root -p mysqltest >/tmp/mysqltest.sql 2 Enter password:
1 [root@Slave01 ~]# scp /tmp/mysqltest.sql root@172.24.8.20:/tmp
在Master主服务器上继续创建库mysqltest02并插入相应数据:
1 [root@Master ~]# mysql -uroot -p 2 Enter password: 3 mysql> create database mysqltest02; 4 mysql> use mysqltest02; 5 mysql> create table user02(id int(5),name char(10)); 6 mysql> insert into user02 values (00002,‘lisi‘); 7 mysql> grant replication slave on *.* to ‘repl_user‘@‘172.24.8.%‘ identified by ‘x12345678‘;
提示:主库继续创建新库用于验证slave02是否能正常复制,同时必须注意赋权给slave02。
参考3.6.
参考3.7.
1 [root@Slave02 ~]# mysql -uroot -px120952576 2 mysql> change master to master_host=‘172.24.8.10‘, 3 master_user=‘repl_user‘, 4 master_password=‘x12345678‘, 5 master_log_file=‘mysql-bin.000003‘, 6 master_log_pos=932; 7 mysql> start slave;
提示:
证常状态下,看到上面的两行加粗处,即Slave_IO_Running和Slave_SQL_Running的参数都为 Yes,就说明主从同步运行正常。
参考3.9.