您的位置:首页 > 数据库 > MySQL

mysqld_multi实现单机主从复制

2017-09-20 16:57 357 查看
步骤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; 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql