mysql基于docker主从配置

节点:

机器 编号 节点
172.16.38.130 node-01 master
172.16.38.131 node-02 slave-01
172.16.38.132 node-03 slave-02

每个节点安装mysql:

docker pull mysql:5.7.19;

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=yunkun920801 -d mysql:5.7.19;

开启root远程登陆并设置密码

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
d706ed1d33eb        mysql:5.7.19        "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:3306->3306/tcp   mysql
[root@localhost ~]# docker exec -ti d706ed1d33eb /bin/bash
root@d706ed1d33eb:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.19 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> grant all privileges on *.* to root@"%" identified by "yunkun920801" with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

至此,三个节点都安装好了mysql并且可通过root远程登录

容器内安装vim

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
d706ed1d33eb        mysql:5.7.19        "docker-entrypoint.s…"   8 minutes ago       Up 8 minutes        0.0.0.0:3306->3306/tcp   mysql
[root@localhost ~]# docker exec -ti d706ed1d33eb /bin/bash
root@d706ed1d33eb:/# apt-get update
root@d706ed1d33eb:/# apt-get install vim

master

root@d706ed1d33eb:/# vi /etc/mysql/mysql.conf.d/mysqld.cnf 



# 设置 server_id,一般设置为 IP 
server_id=130
# 复制过滤:不需要备份的数据库,不输出
binlog-ignore-db=mysql
# 开启二进制日志功能,可以随便取,最好有含义
log-bin=mysql-bin
# 为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存 
binlog_cache_size=1M
# 主从复制的格式mixed,statement,row,默认格式是 statement
binlog_format=mixed
# 二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。 
expire_logs_days=7
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断。 ## 如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一致 
slave_skip_errors=1062

重启主节点

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
d706ed1d33eb        mysql:5.7.19        "docker-entrypoint.s…"   29 minutes ago      Up 29 minutes       0.0.0.0:3306->3306/tcp   mysql
[root@localhost ~]# docker restart d706ed1d33eb
d706ed1d33eb
[root@localhost ~]# 

创建授权账户

[root@localhost ~]# docker exec -ti d706ed1d33eb /bin/bash
root@d706ed1d33eb:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.19-log MySQL Community Server (GPL)

mysql> grant replication slave on *.* to master@'%' identified by 'yunkun920801';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      591 |              | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

至此主节点已完成

slave

vi /etc/mysql/mysql.conf.d/mysqld.cnf

server_id=131
# 开启二进制日志,以备 Slave 作为其它 Slave 的 Master 时使用 
log-bin=mysql-slave1-bin
# 为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存 
binlog_cache_size = 1M
# 主从复制的格式(mixed,statement,row,默认格式是 statement) 
binlog_format=mixed
# 二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。 
expire_logs_days=7
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断。 ## 如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一致 
slave_skip_errors=1062
# relay_log 配置中继日志
relay_log=mysql-relay-bin
# log_slave_updates 表示 slave 将复制事件写进自己的二进制日志 
log_slave_updates=1
# 防止改变数据(除了特殊的线程)
read_only=1

重启后

root@5f4d8cd5ab47:/# mysql -u root -p

mysql> change master to master_host='172.16.38.130', master_user='master', master_password='yunkun920801', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=591, master_connect_retry=30;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;  
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.16.38.130
                  Master_User: master
                  Master_Port: 3306
                Connect_Retry: 30
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 591
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 591
              Relay_Log_Space: 527
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 130
                  Master_UUID: 25b3ee05-328a-11ea-ade2-0242ac110002
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

ERROR: 
No query specified

如下图即便配置成功

两个slave都配置完成可以在master库建表加数据,会发现从库自动备份了,结束!

发布了33 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/kuangni5808/article/details/103903099