搭建mysql主从服务
[!TIP]
基于docker和mysql 8搭建主从服务,一主二从的结构,并且把数据文件放置在master_slave_mysql 文件夹下
首先规划端口,master:3306,slave_one:3307,slave_two:3308
- 创建文件&文件夹
mkdir -p /root/master_slave_mysql/mysql_3306/conf \/root/master_slave_mysql/mysql_3306/data \/root/master_slave_mysql/mysql_3307/conf \/root/master_slave_mysql/mysql_3307/data \/root/master_slave_mysql/mysql_3308/conf \/root/master_slave_mysql/mysql_3308/data \
touch /root/master_slave_mysql/mysql_3306/conf/my.cnf/root/master_slave_mysql/mysql_3307/conf/root/master_slave_mysql/mysql_3308/conf
可以按照自己的喜好创建到不同的位置
-  修改配置 /root/master_slave_mysql/mysql_3306/conf/my.cnf加入 [mysqld] # 服务器唯一ID,默认值1 server-id=1 # 设置日志格式,默认ROW binlog_format=STATEMENT/root/master_slave_mysql/mysql_3307/conf/my.cnf加入 [mysqld] # 服务器唯一ID,默认值1 server-id=2/root/master_slave_mysql/mysql_3308/conf/my.cnf加入 [mysqld] # 服务器唯一ID,默认值1 server-id=3[!NOTE] server-id 在主从架构中是不能重复的,建议把主机设置为1,从机设置为其他值 
-  拉取mysql镜像 docker pull mysql:latest
-  创建主mysql容器 docker run -d -p 3306:3306 \-v /root/master_slave_mysql/mysql_3306/conf/etc/mysql/conf.d \-v /root/master_slave_mysql/mysql_3306/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=自定义密码 \--name=master mysql:latest
-  创建从slave容器 -  创建第一个slave容器 docker run -d -p 3307:3306 \ -v /root/master_slave_mysql/mysql_3307/conf/etc/mysql/conf.d \ -v /root/master_slave_mysql/mysql_3307/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=自定义密码 \ --name=slave_one mysql:latest
-  创建第二个slave容器 docker run -d -p 3308:3306 \ -v /root/master_slave_mysql/mysql_3308/conf/etc/mysql/conf.d \ -v /root/master_slave_mysql/mysql_3308/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=自定义密码 \ --name=slave_two mysql:latest
 
-  
-  配置主机 进入容器 docker exec -it master env LANG=C.UTF-8 /bin/bash配置从机用于登录主机的用户 mysql -uroot -padd user 'slave'@'%' identified with mysql_native_password by '123456';授权 GRANT REPLICATION SLAVE ON *.* TO `slave_account`@`%`[!WARNING] 上例授权范围在生产环境中是不被允许的,建议授权只到业务数据库,而不要授权全部数据库!比如:GRANT REPLICATION SLAVE ON order_server.* TO `slave_account`@`%` 刷新权限 flush privileges;查看状态(记住 file和position字段的值,我的是binlog.000003和3049)show master status;OK,到此主机配置结束了,然后退出容器(退出命令exit,需退出2次,第一次退出mysql,第二次退出容器) 
-  配置从机(从机的配置步骤都一样,为节省篇幅仅拿一台从机配置说明配置步骤) 进入容器 docker exec -it slave_one env LANG=C.UTF-8 /bin/bashmysql -uroot -p执行(注意master_log_pos和master_log_file的值) CHANGE master tomaster_host = '主机IP',master_port = 3306,master_user='slave',master_password='123456',master_log_file ='binlog.000003',master_log_pos=3049;运行复制服务 START SLAVE;[!NOTE] stop slave : 停止复制服务 当遇到错误提示:This operation cannot be performed with a running replica io thread; run STOP REPLICA IO_THREAD FOR CHANNEL ‘’ first时,请执行 STOP REPLICA IO_THREAD FOR CHANNEL ‘’ 验证是否成功 show slave status \G;出现如下:Slave_IO_Running: Yes,Slave_SQL_Running: Yes 则成功;若不成功,请看Last_IO_Error和Last_SQL_Error中的表述 *************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: xxx.xx.xxx.xxxMaster_User: slave_accountMaster_Port: 3306Connect_Retry: 60Master_Log_File: binlog.000003Read_Master_Log_Pos: 3049Relay_Log_File: a066fb82d4ba-relay-bin.000002Relay_Log_Pos: 594Relay_Master_Log_File: binlog.000003Slave_IO_Running: YesSlave_SQL_Running: Yes...Last_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error:...[!WARNING] -  在主从架构配置完成之前,不要对主/从数据库做:增删数据库和表以及增删查改数据的操作。 
-  主从架构配置完成之后,不要对从表做增删改的操作,无论是对表,数据库,行,都不要做。不然可能出现失败 
 
-