1.什么是主从复制
MySQL 主从复制是其最重要的功能之⼀. 主从复制是指⼀台服务器充当主数据库服务器, 另⼀台或多台服务器充当从数据库服务器, 主服务器中的数据⾃动复制到从服务器之中. 对于多级复制, 数据库服务器即可充当主机, 也可充当从机.
MySQL主从复制的基础是主服务器对数据库修改记录⼆进制⽇志, 从服务器通过主服务器的⼆进制⽇志⾃动执⾏更新.
2.主从复制的类型
-
基于语句的复制:
主服务器上⾯执⾏的语句在从服务器上⾯再执⾏⼀遍.
存在的问题: 时间上可能不完全同步造成偏差, 执⾏语句的⽤户也可能是不同⼀个⽤户. -
基于⾏的复制:
把主服务器上⾯改编后的内容直接复制过去, ⽽不关⼼到底改变该内容是由哪条语句引发的.
存在的问题: ⽐如⼀个⼯资表中有⼀万个⽤户, 我们把每个⽤户的⼯资+1000, 那么基于⾏的复制则要复制⼀万⾏的内容, 由此造成的开销⽐较⼤, ⽽基于语句的复制仅仅⼀条语句就可以了. -
混合类型的复制:
MySQL 默认使⽤基于语句的复制, 当基于语句的复制会引发问题的时候就会使⽤基于⾏的复制, MySQL会⾃动进⾏选择.
在MySQL主从复制架构中, 读操作可以在所有的服务器上⾯进⾏, ⽽写操作只能在主服务器上⾯进⾏. 主从复制架构虽然给读操作提供了扩展,可如果写操作也⽐较多的话(多台从服务器还要从主服务器上⾯同步数据), 单主模型的复制中主服务器势必会成为性能瓶颈.
3.主从复制的原理
-
主服务器上⾯的任何修改都会保存在⼆进制⽇志
Binary log
⾥⾯. -
从服务器上⾯启动⼀个
I/O thread
(实际上就是⼀个主服务器的客户端进程), 连接到主服务器上⾯请求读取⼆进制⽇志, 然后把读取到的⼆进制⽇志写到本地的⼀个Relay log
⾥⾯. -
从服务器上⾯开启⼀个
SQL thread
定时检查Relay log
, 如果发现有更改⽴即把更改的内容在本机上⾯执⾏⼀遍. -
如果⼀主多从的话, 这时主库既要负责写, ⼜要负责同时为多个从库提供⼆进制⽇志. 所以可以稍做调整, 将⼆进制⽇志只给某⼀从, 这⼀从再开启⼆进制⽇志并将⾃⼰的⼆进制⽇志再发给其它从. 或者是⼲脆这个从不记录只负责将⼆进制⽇志转发给其它从, 这样架构起来性能可能要好得多, ⽽且数据之间的延时应该也稍微要好⼀些. ⼯作原理图如下:
4.主从复制的配置
最简单的复制模式就是⼀主⼀从的复制模式了, 这样⼀个简单的架构只需要,如下⼏个步骤:
主机上的操作:
- 在主机上建⽴⼀个⽤户, 专⻔⽤来进⾏主从复制
GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%'
IDENTIFIED BY '123';
- 建⽴⼀个主节点, 开启 binlog, 设置服务器id
在主机上找到/etc/mysql/my.cnf
⽂件, 并打开. 将[mysqld]
的段落,改为如下内容:
[mysqld]
# 主机绑定 0.0.0.0 确保从机可以访问. ⽣产环境下出于安全考虑会绑定内⽹地址
bind-address = 0.0.0.0
# 设置主机 ID
server-id = 1
# 主机读写模式: 0 表示读写都可以
read-only = 0
# 主机的 bin log 的路径
log-bin = /var/log/mysql-bin.log
- 然后重启 MySQL 服务:
sudo systemctl restart mysql
- 检查⼆进制⽇志是否启动
进⼊ MySQL, 执⾏如下语句
show variables like 'log_%';
看到 log_bin 的值为 ON 表示成功
- 查看
master
状态
show master status;
记下 File 和 Position 的值
- 建⽴⼀个从节点, 设置服务器id;
同样, 再从机上找到/etc/mysql/my.cnf
⽂件, 并打开, 添加如下内容:
[mysqld]
server-id = 2 # 设置从机的 id
read-only = 1 # 从机设置为只读模式
然后重启: sudo systemctl restart mysql
- 再从机上进⼊ mysql, 并执⾏如下语句:
-- 指定主机
change master to
master_host='192.168.1.10',
master_user='backup',
master_password='123',
master_log_file='mysql-bin.000001',
master_log_pos=434;
-- 启动从库
start slave;
-- 查看从库
show slave status\G;
看到从机状态中包含如下信息说明⼤功告成:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
来源:CSDN
作者:半岛囚天
链接:https://blog.csdn.net/qq_40313877/article/details/104758731