河北建设信息网站,wordpress橫排友情链接,南宁世尊商贸网站建设,南昌哪家网站建设最好基于Docker去创建MySQL的主从架构
用于开发与测试环境读写分离
主从的架构搭建步骤
基于Docker去创建MySQL的主从架构
# 创建主从数据库文件夹
mkdir -p /usr/local/mysql/master1/conf
mkdir -p /usr/local/mysql/master1/data
mkdir -p /usr/local/mysql/slave1/conf
mkd…基于Docker去创建MySQL的主从架构
用于开发与测试环境读写分离
主从的架构搭建步骤
基于Docker去创建MySQL的主从架构
# 创建主从数据库文件夹
mkdir -p /usr/local/mysql/master1/conf
mkdir -p /usr/local/mysql/master1/data
mkdir -p /usr/local/mysql/slave1/conf
mkdir -p /usr/local/mysql/slave1/data# 初始化主数据库配置文件
cd /usr/local/mysql/master1/conf
vi my.cnf# 粘贴以下内容
[mysqld]
datadir /usr/local/mysql/master1/data
character-set-server utf8
lower-case-table-names 1# 主从复制-主机配置# 主服务器唯一ID
server-id 1
# 启用二进制日志
log-binmysql-bin
# 设置logbin格式
binlog_format STATEMENT# 初始化从数据库配置文件
cd /usr/local/mysql/slave1/conf
vi my.cnf# 粘贴以下内容
[mysqld]
datadir /usr/local/mysql/slave1/data
character-set-server utf8
lower-case-table-names 1# 主从复制-从机配置# 从服务器唯一ID
server-id 2
# 启用中继日志
relay-log mysql-relay# 文件夹授权
chmod -R 777 /usr/local/mysqlDocker部署Mysql8.0
# 拉取镜像
docker pull mysql:8.0# 查看镜像
docker images# 构建主数据库容器
docker run --namemysql-master-1 \
--privilegedtrue \
-p 8808:3306 \
-v /usr/local/mysql/master1/data/:/var/lib/mysql \
-v /usr/local/mysql/master1/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/mysql/master1/mysql-files/:/var/lib/mysql-files/ \
-e MYSQL_ROOT_PASSWORDroot \
-d mysql:8.0 --lower_case_table_names1docker ps# 验证是否可以登录
# 交互式进入容器
docker exec -it mysql-master-1 /bin/bash# 登录使用构建时指定的密码root
mysql -uroot -p# 退出
quit
exit# 构建从数据库容器
docker run --namemysql-slave-1 \
--privilegedtrue \
-p 8809:3306 \
-v /usr/local/mysql/slave1/data/:/var/lib/mysql \
-v /usr/local/mysql/slave1/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/mysql/slave1/mysql-files/:/var/lib/mysql-files/ \
-e MYSQL_ROOT_PASSWORDroot \
-d mysql:8.0 --lower_case_table_names1编写主数据库的复制配置文件 # 交互式进入容器
docker exec -it mysql-master-1 /bin/bash# 登录使用构建时指定的密码root
mysql -uroot -p- 主数据库创建用户slave并授权
# 创建用户,设置主从同步的账户名
create user fdy-slave% identified with mysql_native_password by 123456;# 授权
grant replication slave on *.* to fdy-slave%; # 刷新权限
flush privileges;# 查询server_id值
show variables like server_id;# 也可临时重启后失效指定server_id的值主从数据库的server_id不能相同
set global server_id 1;# 重置下master的binlog位点
reset master;# 查询Master状态并记录File和Position的值这两个值用于和下边的从数据库中的change那条sql中的master_log_filemaster_log_pos参数对齐使用
mysql show master status;
----------------------------------------------------------------------------
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
----------------------------------------------------------------------------
| binlog.000001 | 157 | | | |
----------------------------------------------------------------------------
1 row in set (0.00 sec)编写从数据库的复制配置文件
# 进入从数据库
# 注意执行完此步骤后退出主数据库防止再次操作导致File和Position的值发生变化
# 验证slave用户是否可用 fdy-slave/123456# 交互式进入容器
docker exec -it mysql-slave-1 /bin/bash# 登录使用构建时指定的密码root
mysql -uroot -p# 查询server_id值
show variables like server_id;# 也可临时重启后失效指定server_id的值主从数据库的server_id不能相同
set global server_id 2;# 若之前设置过同步请先重置
stop slave;
reset slave;# 设置主数据库
# 主机IP端口192.168.9.149:8808
# 主机帐号密码fdy-slave/123456
change master to master_host192.168.9.149,master_port8808,master_userfdy-slave, master_password123456,master_log_filebinlog.000001,master_log_pos157; # 开始同步
start slave;# 查询Slave状态
mysql show slave status\G
*************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: 192.168.9.149Master_User: fdy-slaveMaster_Port: 8808Connect_Retry: 60Master_Log_File: binlog.000001Read_Master_Log_Pos: 157Relay_Log_File: 16f1708b43a0-relay-bin.000002Relay_Log_Pos: 323Relay_Master_Log_File: binlog.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: 157Relay_Log_Space: 540Until_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: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1Master_UUID: dce2949e-f403-11ef-851f-0242ac110002Master_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Replica has read all relay log; waiting for more 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: Master_public_key_path: Get_master_public_key: 0Network_Namespace:
1 row in set, 1 warning (0.00 sec)# 最后需要查看是否配置成功# 查看参数 Slave_IO_Running 和 Slave_SQL_Running是否都为yes则证明配置成功。若为no则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值。# 查看现有数据库
mysql show databases;
--------------------
| Database |
--------------------
| information_schema |
| mysql |
| performance_schema |
| sys |
--------------------
4 rows in set (0.00 sec)# 主库创建数据库
CREATE DATABASE fdy_user CHARACTER SET utf8mb3 COLLATE utf8_bin;# 主从查看是否创建成功
show databases;注意点
MySQL出现同步问题根据Last_SQL_Error提示查具体的表select * from performance_schema.replication_applier_status_by_worker\G; 就能看到具体错误信息。如若服务器重启在启动docker里面主从镜像需要留意 server_id 是否有变化如果发现my.cnf没有生效就可能需要在容器手动找到文件进行添加 server_id 我是把映射的文件覆盖容器里面这个路径的文件 【记得备份容器里面的my.cnf】 /etc/my.cnf
出现同步问题解决办法
# 主重置下master的binlog位点
reset master;# 从重置下slave
stop slave;
reset slave;# 从设置主数据库
change master to master_host192.168.9.149,master_port8808,master_userfdy-slave, master_password123456,master_log_filebinlog.000001,master_log_pos157; # 从开始同步
start slave;# 查询Slave状态Slave_IO_Running 和 Slave_SQL_Running是否都为 yes
show slave status;