MySQL--MySQL服务器主从复制同步(mysql5.7版本)

前言

生产环境中,服务器不可能只有一台,而多台服务器的存在必然要用到主从复制同步。

一:主从复制原因与解决

1.1:原因

在企业网站中,后端MySQL数据库只有一台时,会有以下问题:
遇到单点故障,服务不可用

无法处理大量的并发数据请求

数据丢失将会造成很大损失

只有一台MySQL数据库存在很多隐患

1.2:解决办法

增加MySQL数据库服务器,对数据进行备份,形成主备

确保主备MySQL数据库服务器数据是一样的

主服务器宕机了,备份服务器继续工作,数据有保障

MySQL主从复制与读写分离是密切相关的

增加两台备份MySQL数据库

1.3:更高级的解决方案

通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力

Amoeba:是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy,外号变形虫

读取请求发送给从服务器时,采用轮询调度算法

主服务器挂掉,我们会采用MHA解决(此实验用不到)

此实验涉及到的账号权限

●主从同步账号

●节点服务器开放调度账号

●Amoeba代理账号

1.4:MySQL主从复制的类型

基于语句的复制(默认)

在主服务器上执行的语句,从服务器执行同样的语句

基于行的复制

把改变的内容复制到从服务器

混合类型的复制

一旦发现基于语句无法精确复制时,就会采用基于行的复制

1.5:主从复制的工作过程

在这里插入图片描述

二:主从复制实验实操

2.1:环境

四台centos7服务器

一台做client

三台做mysql服务器

2.3:实验目的

通过配置,实现主从复制

2.4:实验过程

2.4.1:防火墙设置

所有服务器关闭 Firewall或者进行规则设置

iptables -F
setenforce 0

2.4.2:建立时间同步环境

在主服务器上安装配置NTP时间同步服务器

在从服务器上进行时间同步

2.4.3:编译安装mysql

三台mysql数据库都要进行编译安装mysql

2.4.4:配置mysql主服务器

●修改/etc/my.cnf配置文件,增加服务器id,配置二进制日志选项

[root@master ~]# vim /etc/my.cnf
...省略内容
'//mysqld字段下面修改'
server-id = 11	'//修改为11'
log-bin=master-bin	'//设置二进制日志名'
log-slave-updates=true	'//从服务器更新二进制日志'
[root@master ~]# systemctl restart mysqld.service 	'//重启mysql服务'
[root@master ~]# ls /usr/local/mysql/data     生成日志文件和日志文件的索引文件
auto.cnf        ibdata1      ib_logfile1  master-bin.000001  mysql               sys
ib_buffer_pool  ib_logfile0  ibtmp1       master-bin.index   performance_schema

在这里插入图片描述
登陆mysql服务,授权所有从服务器复制二进制日志的权限

mysql> grant replication slave on *.* to 'myslave'@'192.168.100.%' identified by '123456';
'//192.168.100.0网段的从服务器拥有复制权限,可以使用myslave身份123456密码复制所有的库和表'
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      604 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

2.4.5:配置两台从服务器

修改/etc/my.cnf配置文件,增加服务器id,配置二进制日志选项

[root@slave1 ~]# vim /etc/my.cnf
...省略内容
'//mysqld字段下面修改'
server-id = 22	'//修改为22,另一台从服务器的id设为23,三个id不可相同'
relay-log=relay-log-bin	'//设置二进制日志名'
relay-log-index=slave-relay-bin.index	'//从服务器更新二进制日志'
[root@master ~]# systemctl restart mysqld.service 	'//重启mysql服务'

从服务器slave01配置在这里插入图片描述
从服务器slave02配置
在这里插入图片描述
登陆mysql服务,配置主从同步

mysql> 
mysql> change master to master_host='192.168.100.80',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=604;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G;
...省略内容
             Slave_IO_Running: Yes	'//发现IO是正常的'
            Slave_SQL_Running: Yes	'//SQL是正常的'
...省略内容

2.5:实验验证

主服务器创建一个库

mysql> create database school;
Query OK, 1 row affected (0.01 sec)

mysql> use school;
Database changed
mysql> create table info (id int(4),name char(10));
Query OK, 0 rows affected (0.03 sec)

mysql> insert into info values (1,'zhangsan'),(2,'lisi');
Query OK, 2 rows affected (0.39 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from info;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
+------+----------+
2 rows in set (0.01 sec)

验证两台从服务器查看是否同步

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| school             |
| sys                |
+--------------------+
5 rows in set (0.09 sec)

mysql> use school;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+------------------+
| Tables_in_school |
+------------------+
| info             |
+------------------+
1 row in set (0.00 sec)

mysql> select * from info;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
+------+----------+
2 rows in set (0.00 sec)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值