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;
相关推荐
金色天际线-1 小时前
Nginx 优化与防盗链配置指南
java·后端·spring
weixin_456904278 小时前
Spring Boot 用户管理系统
java·spring boot·后端
cyforkk9 小时前
Spring 异常处理器:从混乱到有序,优雅处理所有异常
java·后端·spring·mvc
程序员爱钓鱼10 小时前
Go语言实战案例-开发一个Markdown转HTML工具
前端·后端·go
桦说编程10 小时前
爆赞!完全认同!《软件设计的哲学》这本书深得我心
后端
thinktik10 小时前
还在手把手教AI写代码么? 让你的AWS Kiro AI IDE直接读飞书需求文档给你打工吧!
后端·serverless·aws
老青蛙13 小时前
权限系统设计-用户设计
后端
echoyu.13 小时前
消息队列-初识kafka
java·分布式·后端·spring cloud·中间件·架构·kafka
yuluo_YX13 小时前
Go Style 代码风格规范
开发语言·后端·golang