docker mysql主从安装-元一软件
1. 首先拉去镜像
docker pull mysql:5.7
2. 运行镜像
主要将日志 存储文件, 配置文件 映射到主机上
docker run-p13307:3306--name mysql-master \-v/mydata/mysql-master/log:/var/log/mysql \-v/mydata/mysql-master/data:/var/lib/mysql \-v/mydata/mysql-master/conf:/etc/mysql \-eMYSQL_ROOT_PASSWORD=123456\-d mysql:5.7[root@basenode~]# docker run-p13307:3306--name mysql-master \>-v/mydata/mysql-master/log:/var/log/mysql \>-v/mydata/mysql-master/data:/var/lib/mysql \>-v/mydata/mysql-master/conf:/etc/mysql \>-eMYSQL_ROOT_PASSWORD=123456\-d mysql:5.776176e5ae29317ea207080be62aeffadaada4c82c03753d2c500916449d6476e[root@basenode~]#3. 主节点创建配置文件并且添加内容如下
1.目录:/mydata/mysql-master/cnf[root@basenodeconf]# vi my.cnf[mysqld]## 设置server_id,同一局域网中需要唯一 server_id=101## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能 log-bin=mall-mysql-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=7## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=10624. 添加完配置后重启mysql
[root@basenodeconf]# docker restart mysql-master mysql-master[root@basenodeconf]#5. 进入到mysql 容器内部
# 进入到容器 docker exec-it mysql-master/bin/bash # 登录mysql mysql-uroot-p1234566. 创建同步用户
6.1 创建用户命令:
mysql>CREATEUSER'slave'@'%'IDENTIFIEDBY'123456';QueryOK,0rows affected(0.01sec)mysql>GRANTREPLICATIONSLAVE,REPLICATIONCLIENTON*.*TO'slave'@'%';QueryOK,0rows affected(0.00sec)mysql>7. 创建从服务器
[root@basenode~]# docker run-p13308:3306--name mysql-slave \>-v/mydata/mysql-slave/log:/var/log/mysql \>-v/mydata/mysql-slave/data:/var/lib/mysql \>-v/mydata/mysql-slave/conf:/etc/mysql \>-eMYSQL_ROOT_PASSWORD=123456\>-d mysql:5.7230880d2ab8c53351656ceb3998e28595dcd5af28879de3755cf6c6993b0879d[root@basenode~]#8. 从节点创建配置文件并且添加内容如下
[root@basenode~]# cd/mydata/mysql-slave/cnf[root@basenodeconf]# vi my.cnf[mysqld]## 设置server_id,同一局域网中需要唯一 server_id=102## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用 log-bin=mall-mysql-slave1-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=7## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062## relay_log配置中继日志 relay_log=mall-mysql-relay-bin ## log_slave_updates表示slave将复制事件写进自己的二进制日志 log_slave_updates=1## slave设置为只读(具有super权限的用户除外) read_only=19. 重启从节点
[root@basenodeconf]# docker restart mysql-slave mysql-slave[root@basenodeconf]#10.在主数据库中查看主从同步状态
mysql>show master status;+-----------------------+----------+--------------+------------------+-------------------+|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|Executed_Gtid_Set|+-----------------------+----------+--------------+------------------+-------------------+|mall-mysql-bin.000001|154||mysql||+-----------------------+----------+--------------+------------------+-------------------+1row in set(0.00sec)mysql>11. 进入从数据库
[root@basenodeconf]# docker exec-it mysql-slave/bin/bash root@230880d2ab8c:/# mysql-uroot-pEnterpassword:WelcometotheMySQLmonitor.Commandsendwith;or \g.YourMySQLconnection id is2Serverversion:5.7.36-logMySQLCommunityServer(GPL)Copyright(c)2000,2021,Oracleand/or itsaffiliates.Oracleis a registered trademark ofOracleCorporationand/or itsaffiliates.Othernames may be trademarks of their respectiveowners.Type'help;'or'\h'forhelp.Type'\c'toclearthe current input statement.mysql>show databases;+--------------------+|Database|+--------------------+|information_schema||mysql||performance_schema||sys|+--------------------+4rows in set(0.00sec)mysql>12. 在从节点上执行同步命令
change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
mysql>change mastertomaster_host='192.168.1.180',master_user='slave',master_password='123456',master_port=13307,master_log_file='mall-mysql-bin.000001',master_log_pos=154,master_connect_retry=30;QueryOK,0rows affected,2warnings(0.00sec)mysql>13. 在从节点上开启主从同步
mysql>start slave;14 查看 从节点的状态
mysql>show slave status \G;***************************1.row***************************Slave_IO_State:WaitingformastertosendeventMaster_Host:192.168.1.180Master_User:slaveMaster_Port:13307Connect_Retry:30Master_Log_File:mall-mysql-bin.000001Read_Master_Log_Pos:154Relay_Log_File:mall-mysql-relay-bin.000002Relay_Log_Pos:325Relay_Master_Log_File:mall-mysql-bin.000001Slave_IO_Running:YesSlave_SQL_Running:YesReplicate_Do_DB:Replicate_Ignore_DB:Replicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno:0Last_Error:Skip_Counter:0Exec_Master_Log_Pos:154Relay_Log_Space:537Until_Condition:NoneUntil_Log_File:Until_Log_Pos:0Master_SSL_Allowed:NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master:0Master_SSL_Verify_Server_Cert:NoLast_IO_Errno:0Last_IO_Error:Last_SQL_Errno:0Last_SQL_Error:Replicate_Ignore_Server_Ids:Master_Server_Id:101Master_UUID:9eedd539-7601-11ec-93ac-0242ac110005Master_Info_File:/var/lib/mysql/master.infoSQL_Delay:0SQL_Remaining_Delay:NULLSlave_SQL_Running_State:Slavehas read all relay log;waitingformore updatesMaster_Retry_Count:86400Master_Bind:Last_IO_Error_Timestamp:Last_SQL_Error_Timestamp:Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set:Executed_Gtid_Set:Auto_Position:0Replicate_Rewrite_DB:Channel_Name:Master_TLS_Version:1row in set(0.00sec)ERROR:Noquery specified mysql>主要出现 两个都位yes 就表示成功Slave_IO_Running: YesSlave_SQL_Running: Yes
15 测试成功
docker-mysql 主从.png