如何实现MySQL服务器主从复制同步?
程序员文章站
2022-04-09 20:34:09
...
文章目录
前言
- 生产环境中,服务器不可能只有一台,而多台服务器的存在必然要用到主从复制同步。
一:主从复制原因与解决
1.1:原因
- 在企业网站中,后端MySQL数据库只有一台时,会有以下问题:
- 遇到单点故障,服务不可用
- 无法处理大量的并发数据请求
- 数据丢失将会造成很大损失
1.2:解决办法
- 增加MySQL数据库服务器,对数据进行备份,形成主备
- 确保主备MySQL数据库服务器数据是一样的
- 主服务器宕机了,备份服务器继续工作,数据有保障
- MySQL主从复制与读写分离是密切相关的
1.3:更高级的解决方案
-
通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力
-
Amoeba:是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy,外号变形虫
读取请求发送给从服务器时,采用轮询调度算法
-
主服务器挂掉,我们会采用MHA解决(此实验用不到)
-
此实验涉及到的账号权限
- 主从同步账号
- 节点服务器开放调度账号
- Amoeba代理账号
1.4:MySQL主从复制的类型
- 基于语句的复制(默认)
- 在主服务器上执行的语句,从服务器执行同样的语句
- 基于行的复制
- 把改变的内容复制到从服务器
- 混合类型的复制
- 一旦发现基于语句无法精确复制时,就会采用基于行的复制
1.5:主从复制的工作过程
二:主从复制实验实操
2.1:环境
- 四台centos7服务器
- 一台做client
- 三台做mysql服务器
2.2:拓扑图
2.3:实验目的
- 通过配置,实现主从复制
2.4:实验过程
2.4.1:防火墙设置
-
所有服务器关闭 Firewall或者进行规则设置
systemctl stop firewalld.service setenforce 0
2.4.2:建立时间同步环境
-
在主服务器上安装配置NTP时间同步服务器
-
使用yum安装NTP服务
-
修改 ntp. conf,设置主服务器为时间同步源
[aaa@qq.com ~]# yum install ntp -y [aaa@qq.com ~]# vim /etc/ntp.conf ...省略内容 server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst '//添加一下两段' server 127.127.195.0 //本地是时钟源// fudge 127.127.195.0 stratum 8 //设置时间层级为8// ...省略内容 [aaa@qq.com ~]# systemctl start ntpd
-
-
在从服务器上进行时间同步
-
使用yum安装 ntpdate并进行时间同步
[aaa@qq.com ~]# yum install ntp ntpdate -y [aaa@qq.com ~]# systemctl start ntpd [aaa@qq.com ~]# /usr/sbin/ntpdate 192.168.79.134 '//两台从服务器都这样设置'
-
2.4.3:编译安装mysql
-
三台mysql数据库都要进行编译安装mysql
MySQL安装环境时要多安装一个 libaio-devel
-
mysql安装看我的另一篇博客,里面有写
-
https://blog.csdn.net/CN_TangZheng/article/details/103783262
2.4.4:配置mysql主服务器
-
修改/etc/my.cnf配置文件,增加服务器id,配置二进制日志选项
[aaa@qq.com ~]# vim /etc/my.cnf ...省略内容 '//mysqld字段下面修改' server-id = 11 '//修改为11' log-bin=master-bin '//设置二进制日志名' log-slave-updates=true '//从服务器更新二进制日志' [aaa@qq.com ~]# systemctl restart mysqld.service '//重启mysql服务'
-
登陆mysql服务,授权所有从服务器复制二进制日志的权限
[aaa@qq.com ~]# mysql -u root -p Enter password: '//192.168.79.0段的从服务器拥有复制权限,可以使用myslave身份123456密码复制所有的库和表' GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.79.%' IDENTIFIED BY '123456'; mysql> flush privileges; '//刷新' Query OK, 0 rows affected (0.00 sec) mysql> show master status; '//查看位置id' +-------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+-------------------+ | master-bin.000001 | 603 | | | | +-------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
2.4.5:配置两台从服务器
-
修改/etc/my.cnf配置文件,增加服务器id,配置二进制日志选项
[aaa@qq.com ~]# vim /etc/my.cnf ...省略内容 '//mysqld字段下面修改' server-id = 22 '//修改为22,另一台从服务器的id设为23,三个id不可相同' relay-log=relay-log-bin '//设置二进制日志名' relay-log-index=slave-relay-bin.index '//从服务器更新二进制日志' [aaa@qq.com ~]# systemctl restart mysqld.service '//重启mysql服务'
-
登陆mysql服务,配置组从同步
[root@slave1 ~]# mysql -uroot -p Enter password: mysql> change master to master_host='192.168.79.134',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=603; mysql> start slave; Query OK, 0 rows affected (0.01 sec) mysql> start slave; ...省略内容 Slave_IO_Running: Yes '//发现IO是正常的' Slave_SQL_Running: Yes '//SQL是正常的' ...省略内容
2.5:实验验证
-
主服务器创建一个库
[root@master ~]# mysql -uroot -p Enter password: mysql> create database erku; Query OK, 1 row affected (0.00 sec)
-
两台从服务器查看是否同步
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | erku | '//成功同步' | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)
上一篇: php获取字符串最后一个标点后的字符串和标点前的字符串
下一篇: Python django环境搭建