赞
踩
MySQL的主从复制(Master-Slave Replication)是一种数据同步技术,用于将数据从一个MySQL主服务器(Master)复制到一个或多个从服务器(Slave)。这种架构可以提供以下优势:
1.读写分离:主从复制可以将数据库的读写操作分离。主服务器执行写操作和更新,而从服务器只执行读操作,这有助于提高系统的性能和可扩展性。
2.数据备份:从服务器可以作为主服务器的备份,防止数据丢失。当主服务器发生故障时,可以切换到从服务器,保证业务的连续性。
3.负载均衡:通过将读操作分配到多个从服务器上,可以平衡负载,提高系统的吞吐量和响应速度。
4.扩展性:主从复制可以轻松地添加更多的从服务器,以满足不断增长的业务需求。
主从复制的过程如下:
主服务器将数据更改记录到二进制日志(Binary Log)中。
从服务器连接到主服务器,并请求主服务器发送二进制日志中的更改事件。
主服务器将二进制日志中的事件发送给从服务器,从服务器将这些事件写入到自己的中继日志(Relay Log)中。
从服务器读取中继日志中的事件,并将这些更改应用到自己的数据库中,从而实现与主服务器的数据同步。
总之,MySQL的主从复制是一种常见的数据同步技术,用于提高系统的性能、可扩展性和数据安全性。
MySQL版本:8.0及以上
Docker-compose环境
创建主库目录及数据目录【用于挂载】
mkdir -p /data/master/database
mkdir -p /data/master/docker
创建从库目录及数据目录【用于挂载】
mkdir -p /data/slave/database
mkdir -p /data/slave/docker
主库配置
vim /data/master/docker/mysql/conf/my.cnf
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
# #主库----start--- 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
# #主库----end---
default_authentication_plugin=mysql_native_password
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
从库配置
vim /data/slave/docker/mysql/conf/my.cnf
[mysqld] user=mysql default-storage-engine=INNODB character-set-server=utf8 # #从库----start--- ## 设置server_id,注意要唯一 server-id=101 ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用 log-bin=mysql-slave-bin ## relay_log配置中继日志 relay_log=edu-mysql-relay-bin # #从库----end--- default_authentication_plugin=mysql_native_password [client] default-character-set=utf8 [mysql] default-character-set=utf8
主库配置
vim /data/master/docker/mysql/Dockerfile
# 使用官方的mysql作为基础镜像
FROM mysql:8.0.19
# 设置mysql用户和组
ENV MYSQL_ROOT_USER: root \
MYSQL_ROOT_PASSWORD: 123456\
MYSQL_ROOT_HOST: localhost
# 定义数据目录
ENV MYSQL_DATA_DIR=/var/lib/mysql
# 创建数据目录
RUN mkdir -p $MYSQL_DATA_DIR && chown -R mysql:mysql $MYSQL_DATA_DIR
# 暴露mysql的端口号
EXPOSE 3306
从库配置
vim /data/slave/docker/mysql/Dockerfile
# 使用官方的mysql作为基础镜像
FROM mysql:8.0.19
# 设置mysql用户和组
ENV MYSQL_ROOT_USER: root \
MYSQL_ROOT_PASSWORD: 123456\
MYSQL_ROOT_HOST: localhost
# 定义数据目录
ENV MYSQL_DATA_DIR=/var/lib/mysql
# 创建数据目录
RUN mkdir -p $MYSQL_DATA_DIR && chown -R mysql:mysql $MYSQL_DATA_DIR
# 暴露mysql的端口号
EXPOSE 3306
主库
vim /data/master/docker-compose.yml
version: '3.0' # 服务容器配置 services: mysql: restart: always build: context: ./docker/mysql ports: - "3306:3306" volumes: - /data/master/database/data:/var/lib/mysql - /data/master/database/logs:/var/log/mysql - ./docker/mysql/conf/my.cnf:/etc/mysql/my.cnf - ./docker/mysql/conf/conf.d:/etc/mysql/conf.d environment: MYSQL_ROOT_PASSWORD: 123456
从库
vim /data/slave/docker-compose.yml
version: '3.0' # 服务容器配置 services: mysql: restart: always build: context: ./docker/mysql ports: - "4306:3306" volumes: - /data/slave/database/data:/var/lib/mysql - /data/slave/database/logs:/var/log/mysql - ./docker/mysql/conf/my.cnf:/etc/mysql/my.cnf - ./docker/mysql/conf/conf.d:/etc/mysql/conf.d environment: MYSQL_ROOT_PASSWORD: 123456
cd /data/master
docker-compose up -d --build
容器正常启动、MySQL服务正常启动如下
连接主库
docker-compose exec -it mysql bash
mysql -u root -p
在主库创建用户并授权
CREATE USER ‘slave’@‘%’ IDENTIFIED BY ‘123456’;
GRANT REPLICATION SLAVE ON . TO ‘slave’@‘%’;
刷新权限
FLUSH PRIVILEGES;
查看主服务器状态(显示如下图)
show master status;
连接从库
pass
订阅主从关系命令如下【以下命令要在MySQL控制台执行】
change master to master_host=‘MySQL主服务器IP地址’,master_port=3306,master_user=root,master_password=‘123456’,master_log_file=‘mysql-bin.000010’,master_log_pos=4580;
#配置详解
/*
change master to
master_host=‘MySQL主服务器IP地址’,
master_user=‘之前在MySQL主服务器上面创建的用户名’,
master_password=‘之前创建的密码’,
master_log_file=‘MySQL主服务器状态中的二进制文件名’,
master_log_pos=‘MySQL主服务器状态中的position值’;
*/
#启用从库
start slave;
#查看从库状态(如下图)
show slave status\G;
测试步骤省略
1.这种方式适用于全新的主从搭建,如果主库存在了一段时间才开始搭建从库同步主从的话,需要做一次主库的全量备份作为从库的基础数据源,在重新恢复新的主从,不然主从同步会出错。
2.记一次已经存在主从,需要重新搭建主库的情况下,如果主库配置参数一致的话需要stop slave,先把从库停掉,不然主库容器无法启动。
3.从库容器重新构建(up -d --build)/重启不影响主从(无需再订阅主从)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。