主从介绍
Mysql主从又叫Replication、AB复制。简单讲就是A与B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,实现数据实时同步
mysql主从是基于binlog,主上需开启binlog才能进行主从
主从过程大概有3个步骤
主将更改操作记录到binlog里
从将主的binlog事件(sql语句) 同步本机上并记录在relaylog里
从根据relaylog里面的sql语句按顺序执行
mysql主从是异步复制过程
master开启bin-log功能,日志文件用于记录数据库的读写增删
需要开启3个线程,master IO线程,slave开启 IO线程 SQL线程,
Slave 通过IO线程连接master,并且请求某个bin-log,position之后的内容。
MASTER服务器收到slave IO线程发来的日志请求信息,io线程去将bin-log内容,position返回给slave IO线程。
slave服务器收到bin-log日志内容,将bin-log日志内容写入relay-log中继日志,创建一个master.info的文件,该文件记录了master ip 用户名 密码 master bin-log名称,bin-log position。
slave端开启SQL线程,实时监控relay-log日志内容是否有更新,解析文件中的SQL语句,在slave数据库中去执行。
主从作用
实时灾备,用于故障切换
读写分离,提供查询服务
备份,避免影响业务
主从形式
一主一从
一主多从(扩展系统读取的性能,因为读是在从库读取的)
多主一从(5.7之后开始)
主主复制
联机复制
主从复制步骤
主库将所有的写操作记录在binlog日志中,并生成log dump线程,将binlog日志传给从库的I/O线程
从库生成两个线程,一个是I/O线程,另一个是SQL线程
I/O线程去请求主库的binlog日志,并将binlog日志中的文件写入relay log(中继日志)中
SQL线程会读取relay loy中的内容,并解析成具体的操作,来实现主从的操作一致,达到最终数据一致的目的
主从复制配置步骤
确保从数据库与主数据库里的数据一致
在主数据库里创建一个同步账户授权给从数据库使用
配合主数据库(修改配置文件)
配置从数据库(修改配置文件)
需求
搭建两台MYSQL服务器,一台作为主服务器,一台作为从服务器,主服务器进行写操作,从服务器进行读操作
环境说明
数据库角色 IP 应用与系统 有无数据
主数据库 192.168.4.219 centos7 mysql-5.7 有
从数据库 192.168.4.218 centos7 mysql-5.7 无
在两台服务器上都按装mysql
环境准备
关闭防火墙以SELINUX
service iptables stop
sed -ri 's/(SELINUX=).*/\1disabled/g' /etc/selinux/config
setenforce 0
安装mysql
安装依赖包
yum -y install ncurses-devel openssl-devel openssl cmake mariadb-devel
创建用户和组
[[email protected] ~]# groupadd -r -g 306 mysql
[[email protected] ~]# useradd -M -s /sbin/nologin -g 306 -u 306 mysql
下载二进制格式的mysql软件包
--[[email protected] ~]# cd /usr/src/
--[[email protected] src]#wget https://downloads.mysql.com/archives/get/file/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
已下载
[[email protected] ~]# cd soft/
[[email protected] soft]# ls -ltrh
total 1.2G
-rw-r--r--. 1 root root 566M Jun 4 18:12 mysql-8.0.11-linux-glibc2.12-i686.tar.gz
-rw-r--r-- 1 root root 614M Jun 13 16:54 mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
解压软件至/usr/local/
[[email protected] soft]# tar xf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[[email protected] soft]# ls /usr/local/
bin config config1 config2 etc games include jdk1.6 lib lib64 libexec mysql-5.7.22-linux-glibc2.12-x86_64 python3 sbin share src tomcat
[[email protected] soft]# cd /usr/local/
[[email protected] local]# ln -sv mysql-5.7.22-linux-glibc2.12-x86_64/ mysql
`mysql' -> `mysql-5.7.22-linux-glibc2.12-x86_64/'
[[email protected] local]# ll
修改目录/usr/locaal/mysql的属主属组
[[email protected] local]# chown -R mysql.mysql /usr/local/mysql
[[email protected] local]# ll /usr/local/mysql -d
lrwxrwxrwx 1 mysql mysql 36 Jun 20 17:17 /usr/local/mysql -> mysql-5.7.22-linux-glibc2.12-x86_64/
添加环境变量
[[email protected] local]# ls /usr/local/mysql
bin COPYING docs include lib man README share support-files
[[email protected] local]# cd
[[email protected] local]# echo 'export PATH=http://www.weixuecn.cn/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[[email protected] local]# . /etc/profile.d/mysql.sh
[[email protected] local]# echo $PATH
/usr/local/mysql/bin:/usr/local/jdk1.6/bin:/usr/local/ssl/bin:/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin