MySql主从复制
为什么需要主从复制?
原因有三:
- 做数据的备份 热备份(冷备份,手动备份保存,复制粘贴,热备:一个数据据发生变化,另一个数据库同步发生变化),作为备份的数据库,当主服务器一旦发生故障后,可切换到从服务器中继续工作,避免数据的丢失。
- 架构的扩展。业务量越来越大,IO访问频率也越来越高,单机已经无法满足我们的需求,此时需要做多库的存储,降低磁盘的IO访问的频率,提高单个机器的IO性能。
- 读写分离(前提条件是有主从复制环境),使数据库支持更大的并发量,尤其是在报表操作中尤为突出,由于部分报表sql语句执行较慢,导致锁表现象,影响前台服务。如果前台使用master,报表使用的是slave,那么报表中的sql语句就不会对前台造成锁表,保证前台的效率。
主从复制原理
至少需要两台及两台以上数据库服务器,master一台,slave可以有n多台
mysql主从复制采用异步机制。
master需要bin-log功能,日志文件用于记录数据库的读写操作,同时授权slave从服务器有权限访问master的信息,
同时需要开启三个线程,master的IO线程,slave中的IO线程、SQL线程
slave从服务器通过IO连接master,并且请求某个bin-log,position之后的内容。
master主服务器收到salve的IO线程发来的日志请求信息,master IO线程会将bin-log,position之后的内容返回给slave IO线程
slave从服务器收到bin-loig日志内容,将bin-log日志内容写入到relay-log中继日志文件中,同时创建一个master.info文件,该文件记录了master的IP、用户名、密码 、master bin-log名称、bin-log,position之后的内容
slave端开启SQL线程,实时监控relay-log日志记录内容是否有更新,如果更新,解析文件中的sql语句,在slave数据库中执行操作。
搭建Mysql主从复制
开发步骤:
-
第一步:准备两台及两台以上的mysql服务器,保证mysql服务器支持远程访问(开启远程访问权限)
-
第二步:首先先配置主服务器 master
-
切换到 etc目录中
cd /etc
在该目录下有一个文件 my.cnf
vim my.cnf
-
有两处需要配置 配置到 [mysqld]的下面
第一处: 配置master-bin 主服务器 log-bin=master-bin
第二处: 配置主服务器的id值 id值要求不能重复 server-id=1
-
登录主服务器 给从服务器授权
mysql -uroot -pMyNewPass4!
授权
grant replication slave on
*.*to root@‘192.168.68.130’ identified by ‘MyNewPass4!’ ;grant replication slave on *.* to root@'192.168.68.130' identified by 'MyNewPass4!'; -
退出主服务器 quit/exit
-
重启master主服务器的mysql
-
再次登录进入
mysql -uroot -pMyNewPass4!查看主服务器中的bin-log日志文件中的偏移量信息
show master status;+-------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+-------------------+ | master-bin.000002 | 154 | | | | +-------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.01 sec) -
说明:从服务器访问的就是master-bin.000002和position中的值154
-
-
配置从服务器 slave
-
切换到etc目录下
cd /etc
编辑my.cnf文件
vim my.cnf
-
有两处地方需要配置:
第一处: log-bin=mysql-bin # 配置 mysql-bin 从服务器
第二处: server-id=2 #配置 第二台从服务器id值 id值不能重复
-
重启从服务器 slave
service mysqld restart ---->Centos6.x
systemctl restart mysqld.service ---->Centos7.x
-
登录从服务器中
mysql -uroot -pMyNewPass4!
连接主服务器master
change master to master_host='192.168.68.129',master_user='root',master_password='MyNewPass4!',master_log_file='master-bin.000002',master_log_pos=154; -
开启从服务器 slave
start slave;
-
查看从服务器的sql线程
show slave status\G;
检查发现 从服务器的IO线程没有开启,原因是因为 从服务器的mysql是从master克隆过来的
-
解决办法有两种:第一种卸载从服务器的mysql;第二种:删除从服务器记录mysql_ids文件
删除从服务器中的auto.cnf文件
采用第二种:删除 /var/lib/mysql/auto.cnf文件
rm -rf /var/lib/mysql/auto.cnf
-
重启从服务器的mysql 重新生成一个auto.cnf文件
-
再次进入从服务器
-
启动slave
-
查看slave从服务器的IO和SQL线程 ,如果都是yes,代表安装成功。
-
-
测试 创建数据库、新建表、新增数据、删除数据、删除表、删除库
卸载mysql服务器
-
查看mysql内容在虚拟机中的信息
rpm -qa | grep -i mysql
-
卸载mysql安装的应用
yum remove mysql-community mysql-community-server mysql-community-libs mysql-community-common mysql80-community mysql-community-client
前输入Y/N 输入Y
-
再次查看mysql剩余的应用
rpm -qa | grep -i mysql
-
如果还有,再次卸载mysql应用
yum remove mysql80-ommunity-release
输入 Y/N 输入Y
-
终极检查
rpm -qa | grep -i mysql
-
查看mysql文件目录
find / -name mysql
-
删除所有包含mysql的文件
rm -rf /usr/share/mysql
如果有多个,全部删除
/etc/logrotate.d/mysql
/etc/selinux/targeted/active/modules/100/mysql
/etc/selinux/targeted/tmp/modules/100/mysql
/var/lib/mysql
/var/lib/mysql/mysql
/usr/bin/mysql
/usr/lib64/mysql
/usr/share/mysql -
卸载成功。
本文详细阐述了MySQL主从复制的重要性,包括备份热备、架构扩展和读写分离。介绍了主从复制原理,以及如何在开发环境中搭建和配置主从复制,包括设置log-bin、授权和启动从服务器。最后展示了如何测试数据库操作以确保复制功能正常。
3186

被折叠的 条评论
为什么被折叠?



