之前我们做过MySQL多实例,正好主从复制这一节我们可以很好的用上。如果还没有了解到的请先看一下MySQL多实例章节。下面我会直接使用前面的3个节点分别是3307,3308,3309。

  1. 准备两个节点以上(多实例)
    3307:master
    3308:slave1
    3309:slave2
  2. 主库开启binlog,从库开启relay-log(默认在数据目录下生成)
    vim /data/3307/my.cnf
    log-bin=/data/3307/mysql-bin
    binlog_format=row
  3. server-id需要不同,保证实例唯一
    [root@db02 data]# cat /data/3307/my.cnf |grep server-id
    server-id=3307
    [root@db02 data]# cat /data/3308/my.cnf |grep server-id
    server-id=3308
    [root@db02 data]# cat /data/3309/my.cnf |grep server-id
    server-id=3309
  4. 关闭数据库的自动域名解析
    每个节点都加入以下配置:skip-name-resolve
    3个配置文件都需要添加skip-name-resolve哦,否则mysql服务会将ip解析为主机名

     
  5. 查看3个实例配置如下
    3307:
    [root@db01 data]# vim 3307/my.cnf 
    
    [mysqld]
    basedir=/application/mysql
    datadir=/data/3307
    server-id=3307
    port=3307
    log-bin=/data/3307/mysql-bin
    binlog_format=row
    socket=/data/3307/mysql.sock
    log-error=/data/3307/mysql.log
    skip-name-resolve
    3308:
    [root@db01 data]# vim 3308/my.cnf 
    
    [mysqld]
    basedir=/application/mysql
    datadir=/data/3308
    server-id=3308
    port=3308
    log-bin=/data/3308/mysql-bin
    socket=/data/3308/mysql.sock
    log-error=/data/3308/mysql.log
    skip-name-resolve
    3309:
    [root@db01 data]# vim 3309/my.cnf 
    
    [mysqld]
    basedir=/application/mysql
    datadir=/data/3309
    server-id=3309
    port=3309
    log-bin=/data/3309/mysql-bin
    socket=/data/3309/mysql.sock
    log-error=/data/3309/mysql.log
    skip-name-resolve
  6. 启动多实例

    [root@db01 data]# mysqld_safe --defaults-file=/data/3307/my.cnf &
    [root@db01 data]# mysqld_safe --defaults-file=/data/3308/my.cnf &
    [root@db01 data]# mysqld_safe --defaults-file=/data/3309/my.cnf &

     

  7. 连接到主库,主库创建复制账户(账户名为repl,密码123456)

    [root@db01 data]# mysql -S /data/3307/mysql.sock 
    mysql> grant replication slave on *.* to repl@'10.0.0.%' identified by '123456';
    Query OK, 0 rows affected (0.00 sec)
    

     

  8. 从库数据的追加
    (1)不需要追加的情况:主和从同时搭建的新环境,就不需要备份主库数据,恢复到从库了,直接从第一个binlog(mysql-bin.000001)的开头位置(120)
    (2)如果主库已经工作了很长时间了,我们一般需要备份主库数据,恢复到从库,然后从库从备份的时间点起自动进行复制

    重点针对第二种情况进行演示:
    备份主库:(还没有了解到mysqldump命令的去查看 二十三节

    [root@db01 /]# mysqldump -S /data/3307/mysql.sock -A -R  --triggers --master-data=2 --single-transaction >/tmp/full.sql
    [root@db01 /]# ll /tmp/
    -rw-r--r-- 1 root root 656285 Aug 20 01:05 full.sql
    

    查看备份文件的第22行,确定position号为325

    [root@db01 /]# sed -n '22p' /tmp/full.sql 
    -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=325;

    将主库的备份数据恢复到从库3308,3309
    3308:

    [root@db01 /]# mysql -S /data/3308/mysql.sock 
    mysql> set sql_log_bin=0;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> source /tmp/full.sql

    3309:

    [root@db01 ~]# mysql -S /data/3309/mysql.sock 
    mysql> set sql_log_bin=0;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> source /tmp/full.sql;

     

  9. 从库开启主从:(通过Change master to 配置主库信息,start slave 开启IO和SQL线程)
    可以通过help change master to 获取具体用法。
    3308:

    [root@db01 /]# mysql -S /data/3308/mysql.sock 
    mysql> CHANGE MASTER TO
        ->   MASTER_HOST='10.0.0.20',
        ->   MASTER_USER='repl',
        ->   MASTER_PASSWORD='123456',
        ->   MASTER_PORT=3307,
        ->   MASTER_LOG_FILE='mysql-bin.000006',
        ->   MASTER_LOG_POS=325;
    Query OK, 0 rows affected, 2 warnings (0.02 sec)
    
    mysql> start slave;
    Query OK, 0 rows affected (0.00 sec)

    3309:

    [root@db01 /]# mysql -S /data/3309/mysql.sock 
    mysql> CHANGE MASTER TO
        ->   MASTER_HOST='10.0.0.20',
        ->   MASTER_USER='repl',
        ->   MASTER_PASSWORD='123456',
        ->   MASTER_PORT=3307,
        ->   MASTER_LOG_FILE='mysql-bin.000006',
        ->   MASTER_LOG_POS=325;
    Query OK, 0 rows affected, 2 warnings (0.07 sec)
    
    mysql> start slave;
    Query OK, 0 rows affected (0.00 sec)

     

  10. 查看主从状态:show slave status\G 
    3308,3309:(主要查看Slave_IO_Running,Slave_SQL_Running的运行状态)

    mysql> show slave status\G
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 10.0.0.20
                      Master_User: repl
                      Master_Port: 3307
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000006
              Read_Master_Log_Pos: 325
                   Relay_Log_File: db01-relay-bin.000002
                    Relay_Log_Pos: 283
            Relay_Master_Log_File: mysql-bin.000006
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
          .
          .
       省略部分      
          .
          .

     

  11. 测试3307,3308,3309的主从复制。
    3307:创建数据库和表,并添加数据。

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    4 rows in set (0.00 sec)
    
    mysql> create database fxw;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> use fxw;
    Database changed
    mysql> create table t1(id int,name varchar(32));
    Query OK, 0 rows affected (0.03 sec)
    
    mysql> insert t1 values(1,'我就是为道日损');
    Query OK, 1 row affected (0.15 sec)
    
    mysql> insert t1 values(2,'我就是菜鸟');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert t1 values(2,'菜鸟就是我');
    Query OK, 1 row affected (0.07 sec)

    3308:查看数据库和表数据

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | fxw                |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    5 rows in set (0.00 sec)
    
    mysql> use fxw;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> select * from t1;
    +------+-----------------------+
    | id   | name                  |
    +------+-----------------------+
    |    1 | 我就是为道日损        |
    |    2 | 我就是菜鸟            |
    |    2 | 菜鸟就是我            |
    +------+-----------------------+
    3 rows in set (0.01 sec)

    3309:查看数据库和表数据

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | fxw                |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    5 rows in set (0.00 sec)
    
    mysql> use fxw;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> select * from t1;
    +------+-----------------------+
    | id   | name                  |
    +------+-----------------------+
    |    1 | 我就是为道日损        |
    |    2 | 我就是菜鸟            |
    |    2 | 菜鸟就是我            |
    +------+-----------------------+
    3 rows in set (0.00 sec)

     

搞定!!!!!!!!!!!!!!!

主从复制属于架构中的重点哦,记得做好笔记。

最后修改于 2019-08-20 10:49:06
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇