这篇文章只是让大家了解一下mysql的主从复制,并且实现了一个案例
但是这个案例不是典型的案例
后面会在写其他的配置方法主从复制解决的问题
- 数据分布
- 负载均衡
- 备份
- 高可用和故障切换
在这个案例中,我们只实现了备份 。其他几个点,我们后边一个一个实现,就不写概念了
这里写的只是简单的实现过程,具体细节是很麻烦的,建议大家都去了解了解
这是使用docker安装MySQL的流程
这里我们假定大部分配置采用默认值即可,在主库和备库都是全新
安装并且拥有同样的数据时这样的假设是合理的。接下来我们将展示如何一步步配置复制:假设有服务
器server1(IP地址172.10.0.2)和服务器server2(IP地址172.10.0.3)
分别执行下面语句,这俩个语句分别是创建mysql_slave 和 mysql_slave1的容器
docker run -itd --name mysql-slave -p 3307:3306 --net mynetwork --ip 172.10.0.3 -e MYSQL_ROOT_PASSWORD=123456 mysql
docker run -itd --name mysql-slave1 -p 3308:3306 --net mynetwork --ip 172.10.0.4 -e MYSQL_ROOT_PASSWORD=123456 mysql
可以看到我们现在创建了三个MySQL的容器
- 第一个是mysql-master
- 第二个是mysql-slave
- 第三个是mysql-slave1
然后三台节点都进入到各自的容器里
docker exec -it id /bin/bash
创建账号
# 创建一个账号
CREATE USER 'master'@'172.10.0.%' IDENTIFIED WITH mysql_native_password BY '123456';
# 给予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'master'@'172.10.0.%';
修改主节点和从节点的配置文件在/etc.mysql/my.cnf
添加
server-id=1
这个server_id 主机跟从机的值坚决不可以一样 一般这个值是根据ip地址的后几位来确定
授权给从节点
CHANGE MASTER TO
MASTER_HOST='172.10.0.2',
MASTER_USER='master',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='binlog.000002',
MASTER_LOG_POS=0;
然后查看主从同步状态
Slave_IO_State、Slave_IO_Running和Slave_SQL_Running这三列
显示当前备库复制尚未运行。
开启主从复制
# 开启主从同步
start slave
# 停止主从复制
stop slave
然后在查看一下主从同步状态
先给master创建一个数据库 kaka_test_master_slave
create datebase kaka_test_master_slave;
然后查看mysql_slave的数据库看有没有创建出来kaka_test_master_slave这个数据库
创建表和添加测试数据
CREATE TABLE IF NOT EXISTS `phone` (
`phoneid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`card` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (phoneid)
);
INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20))); I
INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));
查看mysql_slave的数据状态
数据一切正常