一、mysql主从复制是什么
即 :将一个mysql数据库服务器(主服务器Master) 自动复制 到一个或多个 mysql数据库服务器(从服务器Slave);
二、主从复制实现原理
1、主服务器的mysql操作,记录到一个操作日志 Binarylog。
2、从服务器,通过IO线程 读取主服务器mysql 操作日志 Binary-log,并生成中继日志Relay-log,然后通过Relay-log 自动生成对应数据库操作。
3、一主多从,第二个从数据库slave2,读取第一个从数据库slave1到Binarylog,重复第二条;
三、主从复制的好处
1、数据实时备份,避免服务器出问题造成数据丢失;
2、实现读写分离,分配负载提高性能;
3、主服务器宕机,可切换到从服务器,避免项目出问题;
…
四、实现,以下配置要求MySql 5.7.6 以上版本
1、准备两个数据库,且必须保证都能连接成功;
- master 数据库
- slave 数据库
2、编辑 master数据库的配置文件 my.cnf
vi /etc/my.cnf
添加以下内容
[mysqld] # 在这底下添加
#日志文件格式,有三种,自行百度区别,这里我设置为ROW
binlog_format =ROW
#设置mysql服务器id为1【默认0是 拒绝其他服务器访问日志文件】
server_id =1
#使用GTID实现复制
gtid_mode =ON
#强制执行GTID一致性
enforce-gtid-consistency=true
保存后,重启mysql服务 systemctl restart mysqld
3、编辑slave数据库的配置文件 my.cnf
#日志文件格式,有三种,自行百度区别,这里我设置为ROW
binlog_format =ROW
#设置从服务器id为2【默认0是 拒绝其他服务器访问日志文件】
server_id =2
#使用GTID实现复制
gtid_mode =ON
#强制执行GTID一致性
enforce-gtid-consistency=true
保存后重启服务systemctl restart mysqld
4、在主库中创建从库用户并赋予权限
进入主服务器 mysql命令窗口
#创建从库数据库帐号
mysql> CREATE USER 'slave(用户名自定义)'@'%' IDENTIFIED BY '123456(密码)';
#赋予从库帐号权限
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave(上面定义的用户名)'@'%';
5、主从库关联配置
1、进入 主库mysql窗口
2、执行 show master status;
3、记住 File 和 Position 的值
4、进入从库mysql窗口
5、执行
change master to master_host='主数据库名(或ip)', master_user='slave', master_password='123456(主数据库密码)', master_port=3306, master_log_file='binlog.000003(对应上面File的值)’, master_log_pos=344297(对应上面Position的值), master_connect_retry=30,GET_MASTER_PUBLIC_KEY=1;
6、从库mysql窗口
-开启从库线程 start slave;
7、查看启动状态 show slave status;
以下两个字段 展示为 Yes 即配置成功;
8、自己在主库新建数据库,刷新从库看是否同步;