为什么需要主从配置??
主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展
多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能
下图就描述了一个多个数据库间主从复制与读写分离的模型:

此架构特点:
1、成本低,布署快速、方便
2、读写分离
3、还能通过及时增加从库来减少读库压力
4、主库单点故障
基础知识
主服务器(master):
- 开启二进制日志
- 配置唯一的server-id
- 获取master二进制文件名及位置
- 创建一个用于slave和master通信的用户账号
从服务器(slave):
- 配置唯一的server-id
- 二进制日志可开可不开
- 使用master分配的用户账号读取master二进制日志
- 启用slave服务
MySQL主从复制实践训练
环境准备
两台机器一主一从(生产环境中至少一主一从两台服务器)
注:ip地址必须不变
主库(mysql master):ip为192.168.126.131 port为3306
从库(mysql slave):ip为192.168.126.132 port为3306
MySQL版本要一致
主库配置
1.设置server-id 值并开启binlog参数
进入配置文件
bash
vim /etc/my.cnf
添加
bash
log-bin=mysql-bin
server-id=1
主从双备配置
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置 server-id
之后重启MySQL库,使配置生效
sql
systemctl restart mysqld
2.建立同步账号
#创建用来传输数据的账号
create user 'rep'@'192.168.126.%' identified by 'Rep123456.';
#给这个账号赋予复制权限
grant replication slave on *.* to 'rep'@'192.168.126.%';
刷新授权
flush privileges;
查看权限情况
show grants for 'rep'@'192.168.126.%';
查看主库的状态
(MySQL9之后)
show binary log status;
(MySQL9之前)
show master status;
sql
mysql> create user 'rep'@'192.168.126.%' identified by 'Rep123456.';
Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave on *.* to 'rep'@'192.168.126.%';
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql>
mysql> show grants for 'rep'@'192.168.126.%';
+---------------------------------------------------------+
| Grants for rep@192.168.126.% |
+---------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO `rep`@`192.168.126.%` |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> show binary log status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 880 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql>
注:需要记住主服务器的状态数据,从服务器需要配置:

从库配置
首先配置server-id ,注意server-id在进行主从配置的数据库服务器中是唯一的
主从双备配置
vim /etc/my.cnf
设置server-id,必须是唯一的
server-id=2
log-bin=mysql-bin
bash
server-id=2
log-bin=mysql-bin
之后重启MySQL库,使配置生效
sql
systemctl restart mysqld
2.进入从服务器,执行命令
mysql -uroot -p
9版本中
mysql> change replication source to
-> source_host='192.168.126.131',
-> source_user='rep',
-> source_password='Rep123456.',
-> source_log_file='mysql-bin.000001',
-> source_log_pos=880,
-> source_port=3306;
9版本前
mysql> change master to
-> master_host='192.168.126.131',
-> master_user='rep'
-> ,master_password='Rep123456.',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=880;
开始复制
启动从库同步开关
9后
start replica;
9前
start slave;
检查状态
show replica status\G;
MySQL9前
MySQL9后

完毕!!