mysqld_multi实现单机主从复制

来源:互联网 发布:摄像头ip端口扫描器 编辑:程序博客网 时间:2024/05/18 03:35
步骤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;