步骤1: 使用mysqld_multi开启上一节已经设定好的三个MySQL服务,命令执行如下。
[root@localhost ~]# mysqld_multi --defaults-extra-file=/etc/my.cnf start 1-3
[root@localhost ~]# netstat -an|grep 330
步骤2: 登录Master主服务器,设置一个复制使用的账户,并授予REPLICATION SLAVE权限。这里创建一个复制用户rep1。
[root@localhost ~]# mysql -u root -p -P 3306
mysql> grant replication slave on *.* to 'repl'@'localhost' identified by '123';
mysql> grant replication slave on *.* to 'repl'@'%' identified by '123';
步骤3: 修改Master主数据库服务器的配置文件my.cnf,开启BINLOG,并设置server-id的值。需要重启服务器之后才生效。
[root@localhost ~]#vi /etc/my.cnf
[mysqld1]
port
= 3306
log-bin = /usr/local/var/mysql1/mysql-bin
server-id = 1
[root@localhost ~]# mysqld_multi --defaults-extra-file=/etc/my.cnf stop 1-3
[root@localhost ~]# mysqld_multi --defaults-extra-file=/etc/my.cnf start 1-3
步骤4: 在Master主服务器上,设置度锁定有效,这个操作为了确保没有数据库操作,以便获得一致性的快照。
[root@localhost ~]# mysql -u root -P 3306 -S /tmp/mysql.sock
mysql> flush tables with read lock;
步骤5: 用show master status 命令查看日志情况,查询得到主服务器上当前的二进制日志名和偏移量值。这个操作的目的是为了从数据库启动以后,从这个点开始进行数据的恢复。
mysql> show master status \G;
步骤6: 主数据库服务此时可以做一个备份,可以在服务器停止的情况下直接使用系统拷贝命令。
[root@localhost mysql1]#tar –cvf data.tar data
步骤7: 主数据库备份完成后,主数据库恢复写操作,命令执行如下。
mysql> unlock tables;
mysql> start slave;
步骤8: 接下来继续编辑/etc/my.cnf文件,具体配置项如下。
# The MySQL server
[mysqld_multi]
mysqld
= /usr/local/mysql/bin/mysqld_safe
mysqladmin
= /usr/local/mysql/bin/mysqladmin
user
= root
[mysqld1]
port
= 3306
log-bin
= /usr/local/var/mysql1/mysql-bin
server-id
= 1
[mysqld2]
port
= 3307
socket
= /temp/mysql2.sock
datadir
= /usr/local/var/mysql2
log-bin
= /usr/local/var/mysql2/mysql-bin
server-id
= 2
[mysqld3]
port
= 3308
socket
= /temp/mysql3.sock
datadir
= /usr/local/var/mysql3
log-bin
= /usr/local/var/mysql3/mysql-bin
server-id
= 3
[mysqld]
步骤9: 重启Master主服务器,命令执行如下。
[root@localhost ~]# mysqld_multi --defaults-extra-file=/etc/my.cnf stop 1-3
[root@localhost ~]# mysqld_multi --defaults-extra-file=/etc/my.cnf start 1-3
[root@localhost ~]# mysqld_multi --defaults-extra-file=/etc/my.cnf report
步骤10: 对从数据库服务器做相应设置,此时需要制定复制使用的用户,主数据的IP地址,端口以及开始复制的日志文件和位置等,具体设置如下。
[root@localhost ~]# mysql -uroot -p -P 3307 -S /temp/mysql2.sock
mysql> show variables like '%log_bin%';
mysql> stop slave;
mysql> change master to
-> master_host='127.0.0.1',
-> master_user='repl',
-> master_password='123',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=120;
步骤11: 在从服务器上执行show slave status\G命令查询从服务器的状态,命令执行如下。
mysql> start slave;
mysql> show slave status \G;
步骤12: 此时发现从服务器已经成功设置,此时也可以执行show processlist \G命令查询从服务器的进程状态,命令执行如下。
mysql> show processlist \G;
步骤13: 此时可以测试复制服务的正确性,在Master主数据库上执行一个更新操作,观察是否在从服务器上同步,下面在主数据库的test库上创建一个测试表,然后插入数据,命令执行如下。
[root@localhost ~]# mysql -uroot -p -P 3306 -S /tmp/mysql.sock
mysql> use test;
mysql> show tables;
mysql> create table repl_test(id int);
mysql> insert into repl_test values(1),(2);
步骤14: 在从服务器上检测新的表是否被创建,数据是否同步,执行命令如下。
[root@localhost ~]# mysql -uroot -P 3307 -S /temp/mysql2.sock
mysql> use test;
mysql> show tables;
mysql> select * from repl_test;