目录
前提(无论是基于binlog还是基于gitd)
主库与从库都要安装MySQL(安装方式看自己)----这里使用在线安装
[root@localhost ~]# dnf install -y mysql-server.x86_64
[root@localhost ~]# systemctl start mysqld
注意主库与从库的系统得一致(比如都是openeuler系统或者其他)
一、对MySQL主从同步的了解
MySQL内建的复制功能是构建大型,高性能应用程序的基础 通过将MySQL的某一台主机(master)的数据复制到其他主机(slaves)上,并重新执行一遍来执行 复制过程中一台服务器充当主服务器,而其他一个或多个其他服务器充当从服务器
1、MySQL支持的复制类型
基于语句(statement)的复制 在主服务器上执行SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。 基于行(row)的复制 把改变的内容复制过去,而不是把命令在从服务器上执行一遍。从MySQL 5.0开始支持。 混合型(mixed)的复制 默认采用基于语句的复制,一旦发现基于语句的无法精确复制时,就会采用基于行的复制。
2、为什么要做主从复制
灾备 数据分布 负载平衡 读写分离 提高并发能力
3、主从复制原理---面试会考
主要基于MySQL二进制日志 主要包括三个线程(2个I/O线程,1个SQL线程)
· 1、MySQL将数据变化记录到二进制日志中;
· 2、Slave将MySQL的二进制日志拷贝到Slave的中继日志中;
· 3、Slave将中继日志中的事件在做一次,将数据变化,反应到自身(Slave)的数据库
二、基于binlog的主从同步
这里用一主二从来操作
1、主库上的操作
1)配置文件
#进入文件输入 server_id=1 (为了方便这里id写自己的)
[root@openeuler ~]# vim /etc/my.cnf
#重新启动mysql
[root@localhost ~]# systemctl restart mysqld
2)备份数据库(如果没有数据库则不用)
#db1为表 school为数据库
[root@openeuler ~]# mysqldump --opt -B db1 it school > db.sql
3)授权用户(在mysql下)
mysql> create user rep@'172.16.%.%' identified with mysql_native_password by '123456';
mysql> grant replication slave on *.* to rep@'172.16.%.%';
# *.*表示 所有数据库.所有表
4)查看主库上的用户
#记住自己的Flie 和 position
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------