mysql主从复制/主从备份搭建
- 前言
- 一、主从复制
- 1)为什么使用主从复制、读写分离?
- 2)主从复制原理
- 二、如何实现主从复制?
- 1)主库配置
- 1、修改配置文件
- 2、登录mysql:
- 2)从库配置
- 1、修改配置文件
- 2、登录mysql:
- 3)配置过程中报错1794
- 总结
前言
最新的 Java 面试题,技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等,会持续更新。
如果对老铁有帮助,帮忙免费点个赞,谢谢你的发财手!
一、主从复制
1)为什么使用主从复制、读写分离?
- 主从复制、读写分离一般是一起使用的。
- 目的很简单,就是为了提高数据库的并发性能。假设是单机,读写都在一台MySQL上面完成,性能肯定不高。如果有三台MySQL,一台mater只负责写操作,两台salve只负责读操作,性能就能大大提高了。
2)主从复制原理
- 1、当Master节点进行insert、update、delete操作时,会按顺序写入到binlog中;
- 2、salve从库连接master主库,Master有多少个slave就会创建多少个binlog dump线程;
- 3、当Master节点的binlog发生变化时,binlog dump 线程会通知所有的salve节点,并将相应的binlog内容推送给slave节点;
- 4、I/O线程接收到 binlog 内容后,将内容写入到本地的 relay-log;
- 5、SQL线程读取I/O线程写入的relay-log,并且根据 relay-log 的内容对从数据库做对应的操作。
二、如何实现主从复制?
假设这里用三台Linux服务器,IP分别是101(Master),102(Slave),103(Slave),确保三台服务器能够相互访问。
我的mysql数据库版本是5.7
1)主库配置
1、修改配置文件
vim /etc/my.cnf
1、添加如下配置:
[mysqld]
#开启binlog
log-bin=mysql-bin # 启用bin log日志
server-id=101 #服务器唯一id
#需要同步的数据库,如果不配置则同步全部数据库
binlog-do-db=test_db
#是否只读,1 代表只读, 0 代表读写 (不加代表读写)
read-only=0
2、保存后,重启mysql服务器
systemctl status mysqld; # 查看mysql状态,显示active(running)说明正常
systemctl restart mysqld; # 重启mysql
2、登录mysql:
mysql -u <用户名> -p;
1、配置权限
//192.168.0.102是slave从机的IP
GRANT REPLICATION SLAVE ON *.* to 'root'@'192.168.0.102' identified by 'root@1234';
//192.168.0.103是slave从机的IP
GRANT REPLICATION SLAVE ON *.* to 'root'@'192.168.0.103' identified by 'root@1234';
//刷新系统权限表的配置
FLUSH PRIVILEGES;
2、查看当前binlog日志的信息
执行命令:show master status\G
- file : 从哪个日志文件开始推送日志文件
- position : 从哪个位置开始推送日志
- binlog_ignore_db : 指定不需要同步的数据库
2)从库配置
1、修改配置文件
vim /etc/my.cnf
1、添加如下配置:
[mysqld]
server-id=102 #服务器唯一id
2、保存后,重启mysql服务器
systemctl restart mysqld; # 重启mysql
2、登录mysql:
mysql -u <用户名> -p;
1、设置主库配置
1)如果mysql是 8.0.22 之前的版本,执行如下SQL:
CHANGE MASTER TO MASTER_HOST='192.168.0.101', MASTER_USER='root', MASTER_PASSWORD='root@1234', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=18802;
2)如果mysql是 8.0.22 之后的版本,执行如下SQL:
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.0.101', SOURCE_USER='root', SOURCE_PASSWORD='root@1234', SOURCE_LOG_FILE='mysql-bin.000001', SOURCE_LOG_POS=18802;
2、开启主从同步操作
#8.0.22之后:
start replica ;
#8.0.22之前:
start slave ;
3、查看主从同步状态
#8.0.22之后:
show replica status;
#8.0.22之前:
show slave status ;
- 可以查看当前同步的偏移量是18802;
- 以及同步状态Slave_IO_Running和Slave_SQL_Running都是YES。
3)配置过程中报错1794
- Mysql配置主从报错:
Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave...
- 解决:我是因为/etc/my.cnf 没有加 [mysqldl],而且不能拼写错误。
总结
都已经看到这里啦,赶紧收藏起来,祝您工作顺心,生活愉快!
https://blog.csdn.net/lxw1844912514/article/details/116119330
https://blog.csdn.net/weixin_45118229/article/details/124489873