【微服务】部署mysql集群,主从复制,读写分离

两台服务器做如下操作

c 复制代码
1.安装mysql
 docker pull mysql:5.7

2.启动以及数据挂载
mkdir /root/mysql/data /root/mysql/log /root/mysql/conf
touch my.conf //mysql的配置文件

docker run --name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/log:/var/log/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-dp 3306:3306 \
mysql:5.7

3.启动数据库,开机自启
docker start mysql
docker update mysql --always=restart

4.修改配置文件,设置mysql为utf-8编码
[client]
default_character_set=utf8
[mysql]
default_character_set=utf8
[mysqld]
character_set_server=utf8
server_id=01   //主从服务器id要不一致
binlog-ignore-db=mysql  //此参数表示不记录指定的数据库的二进制日志。
log-bin=master-log-bin  //开启mysql的binlog日志功能,master-log-bin文件名
binlog_cache_size=1M  //binlog缓存大小
binlog_format=mixed  //binlog日志格式,mysql默认采用statement,建议使用mixed
expire_logs_days=7  //二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
slave_skip_errors=1062  //忽略主键冲突报错

#MySQL主从同步中,经常遇到的三种同步错误:
#1、在master上delete一条记录,若在slave上没有这条数据,会出现报错。
#2、在master上insert一条记录,若在slave上主键值已经存在,会出现报错。
#3、在master上update一条记录,若在slave上没有这条数据,会出现报错。
#如果slave的my.cnf已经配置了slave_skip_errors参数,则可以自动跳过报错,如果没有配置该参数,则可以用以下方法解决:
#mysql> set global slave_exec_mode='idempotent'; 
#默认值是strict(严格模式),IDEMPOTENT  模式跳过主键冲突错误和更新删除行不存在错误。
#默认情况下该参数值是off,我们可以列出具体的error code,也可以选择all,mysql5.6及MySQL Cluster NDB 7.3以及后续版本增加了参数#ddl_exist_errors,该参数包含一系列error code(1007,1008,1050,1051,1054,1060,1061,1068,1094,1146)
#    一些error code代表的错误如下:
#     1007: 数据库已存在,创建数据库失败
#     1008: 数据库不存在,删除数据库失败
#     1050: 数据表已存在,创建数据表失败
#     1051: 数据表不存在,删除数据表失败
#     1054: 字段不存在,或程序文件跟数据库有冲突
#     1060: 字段重复,导致无法插入
#     1061: 重复键名
#     1068: 定义了多个主键
#     1094: 位置线程ID
#    1146: 数据表缺失,请恢复数据库
#    1053: 复制过程中主服务器宕机
#     1062: 主键冲突 Duplicate entry '%s' for key %d


5.查看是否生效
docker exec -it mysql /bin/bash
mysql -uroot -p
show variables like 'character%';
show master status;  //显示主服务器状态

+-----------------------+----------+--------------+------------------+-------------------+
| File                  | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+----------+--------------+------------------+-------------------+
| master-log-bin.000001 |      617 |              | mysql            |                   |
+-----------------------+----------+--------------+------------------+-------------------+

6.创建账户给从数据库使用
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
flush privileges;

7.修改salve数据库配置
[client]
default_character_set=utf8
[mysql]
default_character_set=utf8
[mysqld]
character_set_server=utf8
server_id=02
binlog-ignore-db=mysql
log-bin=slave-log-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
relay_log=relay-log-bin  //从主服务器上同步日志文件记录到本地
log_slave_updates=1 //表示slave将复制事件写进自己的二进制日志。当设置log_slave_updates时,你可以让slave扮演其它slave的master
read_only=1  //1是只读

8.重启从mysql,并连接主mysql
change master to master_host='192.168.162.201' , //主服务器ip
 master_user='slave' ,  //连接使用的用户
 master_password='123456' , //连接用户的密码
 master_port=3306 ,//主服务器端酒
 master_log_file='master-log-bin.000002'  //binlog文件位置
,master_log_pos=617  //#数据的最新位置
,master_connect_retry=30  //重连时间
,master_retry_count=3; //重连次数

9.查看从服务状态,以及开启主从模式
show slave status \G;
start slave  //开启主从模式

show slave status \G;

未开启是状态

开启后

相关推荐
JavaGuide2 分钟前
一条 SQL 语句在 MySQL 中是如何执行的?
java·数据库·后端·mysql
激动的兔子11 分钟前
mysqldump使用cmd窗口和powersell窗口导出sql中文乱码的问题
数据库·mysql·mariadb
江喜原15 分钟前
微服务下设计一个注解标识是否需要登录
java·微服务·架构·登录
圆头圆脑圆JAVA24 分钟前
简单了解微服务--黑马(在更)
java·spring boot·微服务
Shall#1 小时前
Innodb存储架构
数据库·mysql·架构
Jiangw5572 小时前
【实战篇】MySQL是怎么保证主备一致的?
数据库·sql·mysql
藓类少女7 小时前
正则表达式
数据库·python·mysql·正则表达式
qq_35323353899 小时前
【原创】java+springboot+mysql科研成果管理系统设计与实现
java·spring boot·mysql·mvc·web
计算机学姐10 小时前
基于python+django+vue的旅游网站系统
开发语言·vue.js·python·mysql·django·旅游·web3.py
SZ17011023110 小时前
麒麟银河桌面版,成功安装cuda12.6,mysql
mysql·cuda·银河麒麟