- 为什么需要数据库集群?
随着业务的发展,系统的数据量和访问量都在大量增长。
对于大型网站来说,有不少业务是读多写少的。
- 数据库集群:
一个是主库,负责写入数据,我们称之为:写库
其他都是从库,负责读取数据,我们称之为:读库
- 容器化实现:
- 环境搭建
- 下载mysql 镜像
docker pull mysql:5.7
- 启动 docker
docker run -p 3339:3306 --name mysql-master --privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker run -p 3340:3306 --name mysql-slave --privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
- 查看ip
【查看主IP】
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master
【查看从IP】
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-slave
-
- 主从配置实现:
主节点配置
- 1. 进入容器:
- 2. 修改配置文件
vim /etc/mysql/my.cnf
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
注:没有vim 需要安装
apt-get update
apt-get install vim
- 3. 重启mysql服务使配置生效
service mysql restart
## 重启mysql会使docker容器停止
docker start mysql-master
- 4. 创建数据同步用户并授权
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
从节点配置
- 修改配置文件
vim /etc/mysql/my.cnf
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用 log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
- 重启生效
链接Master(主)和Slave(从)
- 1、查看主节点的状态
show master status;
- 2、在Slave 中配置同步数据的File 和Position
change master to master_host='172.17.0.2', \
master_user='slave',\
master_password='123456', \
master_port=3306, \
master_log_file='mysql-bin.000001', \
master_log_pos= 617, \
master_connect_retry=30;
配置说明:
master_host:Master的地址
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
- 3、开启主从复制
start slave;
- 4、在Slave中查看主从同步状态
show slave status \G;
-
- 测试主从复制
在Master创建一个数据库,检查Slave是否存在此数据库