谷粒商城-集群-89-Docker 部署 MySQL 主从同步
一、集群的目标
高可用(High Avaliability),是当一台服务器停止服务后,对于业务及用户毫无影响。停止服务的原因可能由于网卡、路由器、机房、CPU负载过高、内存溢出、自然灾害等不可预期的原因导致,在很多时候也称为单点问题。
突破数据量限制,一台服务器不能存储大量数据,需要多台分担,每个存储一部分,共同存储完整个集群数据,最好能做到互相备份,即使单节点故障,也能在其他节点找到数据。
数据备份容灾,单节点故障后,存储的数据仍然可以在别的地方拉起。
分担压力,由于多个服务器都能完成各自一部分工作,所以尽量的避免了单点压力的存在。
二、集群的基础形式
三、MySQL集群
MySQL-MMM是Master-Master-Replication Manager for Mysql(MySQL主主复制管理器)的简称。MMM基于MySQL Replication 做的扩展架构,主要用来监控 MySQL 主主复制并做失败转移。其原理是将真实数据库节点的IP(RIP)映射为虚拟的IP(VIP)集。
MySQL 主从同步
1、下载MySQL镜像
sudo docker pull mysql:5.7
2、创建Master实例并启动
docker run -p 3307: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 \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数说明:
- -p 3307:3306 : 将容器的 3306 端口映射到主机的 3307 端口
- -v /mydata/mysql/master/conf:/etc/mysql :将配置文件夹挂载到主机,在主机Linux下创建/mydata/mysql/conf文件夹映射docker
- -v /mydata/mysql/master/log:/var/log/mysql:将日志文件夹挂载到主机
- -v /mydata/mysql/master/data:/var/lib/mysql : 将运行期间的数据文件挂载到主机
- e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码
- -d mysql:5.7 : -d 表示以后台的方式运行,mysql:5.7 表示以该镜像启动容器
修改master基本配置:
vi /mydata/mysql/master/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
设置好了之后,需要重启MySQL容器:
[root@localhost conf]# docker restart mysql-master
mysql
3、创建slaver从库实例并启动
docker run -p 3317:3306 --name mysql-slaver-01 \
-v /mydata/mysql/slaver/log:/var/log/mysql \
-v /mydata/mysql/slaver/data:/var/lib/mysql \
-v /mydata/mysql/slaver/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
同主MySQL一样,需要修改 slave 基本配置。
vi /mydata/mysql/slaver/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
4、添加master主从复制部分配置
主MySQL配置文件修改:
#master-slaver repication
server_id=1
log-bin=mysql-bin
read-only=0
binlog-do-db=gulimall_ums
binlog-do-db=gulimall_pms
binlog-do-db=gulimall_oms
binlog-do-db=gulimall_wms
binlog-do-db=gulimall_admin
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
修改完配置后重启master。
从MySQL配置文件修改:
#master-slaver repication
server_id=2
log-bin=mysql-bin
read-only=1
binlog-do-db=gulimall_ums
binlog-do-db=gulimall_pms
binlog-do-db=gulimall_oms
binlog-do-db=gulimall_wms
binlog-do-db=gulimall_admin
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
配置好之后重启 slaver。
为master授权用户来同步它的数据
1、进入master容器
docker exec -it mysql /bin/bash
2、进入mysql内部
> mysql -uroot -p
1)、授权 root可以远程访问(主从无关,为了方便我们远程连接MySQL)
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
2)、添加用来同步的用户
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456';
3)、查看master状态
show master status\G;
配置slaver同步master数据
1、进入slaver容器
docker exec -it mysql-slaver-01 /bin/bash
2、进入mysql内部
> mysql -uroot -p
1)、授权 root可以远程访问(主从无关,为了方便我们远程连接MySQL)
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
2)、设置主库连接
change master to master_host='192.168.10.10',master_user='backup',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=0,master_port=3307;
3)、启动从库同步
start slave;
4)、查看从从库状态
show slave status\G;
实战:
在master创建 gulimall-oms 库,并创建 order_info 表,然后看从库是否同步过来。
如果主从库数据不同步,则可以使用如下命令临时解决:
mysql> stop slave;
Query OK, 0 rows
affected (0.00 sec)
mysql> set global sql_slave_skip_counter=1;
Query OK, 0 rows
affected (0.00 sec)
mysql> start slave;
Query OK, 0 rows
affected (0.00 sec)
相关文章:
3分钟解决MySQL 1032 主从错误
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)