【微服务】部署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;

未开启是状态

开启后

相关推荐
Gemini19953 小时前
分布式和微服务的区别
分布式·微服务·架构
瓜牛_gn4 小时前
mysql特性
数据库·mysql
Yaml49 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
追风林10 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
Hsu_kk12 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql
编程学无止境12 小时前
第02章 MySQL环境搭建
数据库·mysql
knight-n12 小时前
MYSQL库的操作
数据库·mysql
茶馆大橘12 小时前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel
coding侠客13 小时前
揭秘!微服务架构下,Apollo 配置中心凭啥扮演关键角色?
微服务·云原生·架构
eternal__day13 小时前
MySQL_聚合函数&分组查询
数据库·mysql