简介
主从复制就是有两台数据库,一台作为主库,一台作为从库,从库会根据主库的binlog将数据复制过来,从而达到主从数据库数据保持一致的效果。主要用途如下:
- 起到备份数据的作用,主库出现问题,从库还能有数据,不至于数据丢失。
- 主从的架构可以做读写分离,主库写,从库读,分摊数据库压力,提高效率。
环境准备
本次只用两台虚拟机演示主从复制,从库可以有多个。
操作系统Centos7,数据库mysql5.7
ip |
角色 |
192.168.32.132 |
主库 |
192.168.32.133 |
从库 |
主库配置
打开主库mysql配置文件
vim /etc/my.cnf
增加如下配置
#主从之间保证唯一即可,一般都是用ip最有一位 server_id=1 #开启binlog,binlog 日志件会以my-bin作为前缀 log-bin=my-bin #只记录指定数据库的二进制日志,默认全部记录 binlog-do-db=TestDB #不复制数据库系统自带的数据库 binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performance_schema binlog-ignore-db=sys #忽略错误,如1062主键冲突,当在从库插入数据后又在主库插入数据,之后同步会出错 #可以给用户授予最小的权限,避免这个问题 slave_skip_errors=1062
重启mysql
systemctl restart mysqld
创建测试数据库并插入测试数据
CREATE DATABASE `TestDB` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE `TestDB`; CREATE TABLE `User` ( `Id` BIGINT ( 20 ) NOT NULL AUTO_INCREMENT, `Name` VARCHAR ( 255 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, PRIMARY KEY ( `Id` ) USING BTREE ) ENGINE = INNODB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; INSERT INTO `User`(`Name`) VALUES ( '张三' ),( '李四')
备份数据库用于初始化从库,保证主从数据库起始状态一致
由于测试数据库比较简单,数据较少,可以直接在从库上执行上面的创建测试库语句也是一样的
mysqldump - u root - p --d atabases TestDB > TestDB.SQL
登录mysql查看master状态
SHOW MASTER STATUS;
File 为binlog的文件名,用于从库配置文件
Position 的值用于从库配置从哪个位置开始同步
从库配置
还原备份的主库数据库
也可执行主库的建库建表插入数据语句
打开主库mysql配置文件
vim /etc/my.cnf
增加如下配置
#主从之间保证唯一即可,一般都是用ip最有一位 server-id=2 #只读 read_only=1
重启mysql
systemctl restart mysqld
登录从库执行命令连接主库
CHANGE MASTER TO master_host='192.168.32.132', master_user='root', master_password='123qwe', master_port=3306, master_log_file='my-bin.000001', master_log_pos=6906, master_connect_retry=30;
master_log_file:主库binlog文件名
master_log_pos:从主库binlog哪个位置开始同步
启动主从同步
START SLAVE;
查看从库状态
SHOW SLAVE STATUS
Slave_IO_Running:YES
Slave_IO_Running:YES 这两个值为yes说明主从配置成功
测试主从同步
主库插入数据
INSERT INTO `User`(`Name`) VALUES ( '王五' ),( '赵六');
从库也会出现这两条数据
转载作品,原作者:一行代码,文章来源:https://www.toutiao.com/i7061433459738247692