docker安装mysql8.0主备

mac环境,网上没有找到docker部署8.0的文章,踩了两个小时坑

  1. 拉取master镜像: 注意要先登录一下docker账户,不然不让拉取镜像,科学上网一下才能登录
bash 复制代码
docker run -p 3307:3306 --name mysql-master -v ~/data/mysql-master/log:/var/log/mysql -v ~/data/mysql-master/data:/var/lib/mysql -v ~/data/mysql-master/conf/my.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0

在~/data/mysql-master/conf/my.cnf下面要创建一个my.cnf文件,内容如下:

ini 复制代码
[mysqld]
server_id=101
binlog-ignore-db=mysql
log-bin=mall-mysql-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062

然后登入到容器里面创建用户

bash 复制代码
docker exec -it mysql-slave /bin/bash
mysql -uroot -proot

mysql> create user 'slave'@'%' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave,replication client on *.* to 'slave'@'%';
Query OK, 0 rows affected (0.01 sec)

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

show master status;命令一会要用到。

  1. 拉取slave
bash 复制代码
docker run -p 3308:3306 --name mysql-slave -v ~/data/mysql-slave/log:/var/log/mysql -v ~/data/mysql-slave/data:/var/lib/mysql -v ~/data/mysql-slave/conf/my.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0

进入到容器里面, 设置主库的信息,不需要额外配置docker网络,两个容器的网络就通,写本机的ifconfig的ip就行。

yaml 复制代码
docker exec -it mysql-slave /bin/bash

mysql -uroot -proot

mysql> change master to master_host='192.168.199.192',master_user='slave',master_password='123456',master_port=3307,master_log_file='mall-mysql-bin.000003',master_log_pos=682,master_connect_retry=30;

Query OK, 0 rows affected, 10 warnings (0.03 sec)

mysql> start slave;

Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql> show slave status \G;

*************************** 1. row ***************************

               Slave_IO_State: Waiting for source to send event

                  Master_Host: 192.168.199.192

                  Master_User: slave

                  Master_Port: 3307

                Connect_Retry: 30

              Master_Log_File: mall-mysql-bin.000003

          Read_Master_Log_Pos: 682

               Relay_Log_File: mall-mysql-relay-bin.000002

                Relay_Log_Pos: 331

        Relay_Master_Log_File: mall-mysql-bin.000003

             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: 682

              Relay_Log_Space: 546

              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: 101

                  Master_UUID: 27bdea8f-624f-11f0-81d0-0242ac110002

             Master_Info_File: mysql.slave_master_info

                    SQL_Delay: 0

          SQL_Remaining_Delay: NULL

      Slave_SQL_Running_State: Replica 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: 

       Master_public_key_path: 

        Get_master_public_key: 0

            Network_Namespace: 

1 row in set, 1 warning (0.00 sec)

一般有问题都是Last_IO_Error有问题,网络不通,或者server_id重复。server_id重复说明my.cnf没挂上,检查一下之前挂载目录的命令。show variables like 'server_id';可以查看当前的server_id。

  1. 测试环节 主库建表,从库能访问到就成功。
sql 复制代码
create databse test;
use test;
insert into t1 values(1,1);
select * from t1;
相关推荐
小咕聊编程35 分钟前
【含文档+源码】基于SpringBoot的过滤协同算法之网上服装商城设计与实现
java·spring boot·后端
追逐时光者7 小时前
推荐 12 款开源美观、简单易用的 WPF UI 控件库,让 WPF 应用界面焕然一新!
后端·.net
Jagger_7 小时前
敏捷开发流程-精简版
前端·后端
苏打水com8 小时前
数据库进阶实战:从性能优化到分布式架构的核心突破
数据库·后端
间彧9 小时前
Spring Cloud Gateway与Kong或Nginx等API网关相比有哪些优劣势?
后端
间彧9 小时前
如何基于Spring Cloud Gateway实现灰度发布的具体配置示例?
后端
间彧9 小时前
在实际项目中如何设计一个高可用的Spring Cloud Gateway集群?
后端
间彧9 小时前
如何为Spring Cloud Gateway配置具体的负载均衡策略?
后端
间彧9 小时前
Spring Cloud Gateway详解与应用实战
后端
EnCi Zheng10 小时前
SpringBoot 配置文件完全指南-从入门到精通
java·spring boot·后端