目录
1.理论知识
1.备份的三种类型
1.物理备份
2.逻辑备份
3.热备份
2.复制原理
1. replication,可以实现将数据从一台数据库服务器(mster)复制到多台数据库服务器slave;
2. 默认情况下,replication属于异步复制,所以无需长连接;
3.工作原理
1. slave端的io线程发送请求给master端的binlog dump线程;
2. master端的binlog dump线程获取二进制⽇志信息(文件名和位置信息)发送给slave端的io线程;
3. slave端的io线程获取到内容,依次写到slave端relay log (中继⽇志)并把master端的binlog文件名和位置记录 到master.info里;
4. slave端的sql线程检测到relaylog中的内容更新,就会解 析relaylog中的更新内容,并执行这些操作,而达到和 master端数据一致;
3.复制架构体系
1.双机热备主从复制
默认情况下,master接受读写,slave只接受读。
2.级联复制
可以分担读的压力,但只要直接服务器出现故障,就瘫痪了。
3.并联复制---一主多从
解决了单点故障问题,承担了更多读的压力,但从服务器都从主服务器读数据,主服务器的压力更大了。
4.双主复制
看起来可以同时接受读写,实际工作中只有一台服务器在工作,另一台只接受读。
2.环境准备
普通的ab复制,使用最基本的架构M-S,两者的数据库版本必须一致。
1.环境规划
编号 | 主机名称 | 主机ip地址 | 角色信息 |
1 | master-mysql | 192.168.1.40 | 主服务器 |
2 | slave-mysql | 192.168.1.41 | 从服务器 |
2.前期准备
两台主机都要修改
1.设置主机名
[root@localhost ~]# hostnamectl set-hostname master-mysql #主服务器
[root@localhost ~]# hostnamectl set-hostname slave-mysql #从服务器
2.修改ip
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
...
BOOTPROTO="none" #修改地址分配方式
IPADDR=192.168.1.40 #添加一行
...
3.关闭selinux和防火墙并设置开机自启
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/selinux/config
...
SELINUX=disabled
...
4.配置yum源
阿里云的镜像仓库可根据官方给出的步骤进行配置,再配置一个epel源。
阿里云地址:centos镜像_centos下载地址_centos安装教程-阿里巴巴开源镜像站
yum -y install epel-release.norach
5.配置时间同步
[root@master-mysql ~]# yum -y install ntpdate #下载时间服务
[root@master-mysql ~]# yum -y install rsync #下载文件共享服务
[root@master-mysql ~]#ntpdate cn.ntp.org.cn #设置时间同步
3.主服务器配置
1.上传mysql安装包到mstaer和slave
2.编写mysql安装脚本
#!/bin/bash
#检查依赖包,没有就进行安装
yum list installed |grep libaio
if [ $? ne 0 ]; then
yum -y install libaio
fi
echo libaio yes
#删除原有的my.cnf文件,避免安装不成功
rm -rf /etc/my.cnf
echo remo my.cnf yes
#解压缩包
tar -xf mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
echo tar zx yes
#复制解压之后的文件到/usr/local/mysql/目录下
cp -r ~/mysql-8.0.33-linux-glibc2.12-x86_64 /usr/local/mysql
echo copy file to /usr/local/mysql yes
#创建一个mysql-files文件
mkdir /usr/local/mysql/mysql-files
echo mysql-files yes
#是否有mysql用户,没有就创建
grep mysql /etc/passwd
useradd -r -s /sbin/nologin mysql
#修改文件权限
chown mysql:mysql /usr/local/mysql/mysql-files
chmod 750 /usr/local/mysql/mysql-files
#初始化mysql
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/
/usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data
#复制文件到/etc/目录下的目录里面
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql8
#mysql允许环境配置
sed -i '$aexport PATH=/usr/local/mysql/bin:$PATH' /etc/profile
#允许改配置文件
source /etc/profile
3.执行脚本
source mysql.sh
4.编写配置文件
vim /usr/local/mysql/my.cnf
[mysqld]
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data/
socket=/tmp/mysql.sock #套接字
port=3306 #端口
log-error=/usr/local/mysql/data/db01-master.err #错误日志
log-bin=/usr/local/mysql/data/binlog #二进制文件
server-id=10 #服务器id,主从必须不一样
character_set_server=utf8mb4
5.重启服务
[root@master-mysql ~]# service mysql8 restart
6.设置开机自启
[root@master-mysql~]#chkconfig--add mysql8 #添加mysql服务
[root@master-mysql~]#chkconfig mysql8 on #设置开机自启
[root@master-mysql~]#chkconfig
注:该输出结果只显示SysV服务,并不包含原生systemd服务。
SysV配置数据可能被原生systemd配置覆盖。
要列出systemd服务,请执行'systemctllist-unit-files'。
查看在具体target启用的服务请执行'systemctllist-dependencies[target]'。
mysql8 0:关1:关2:开3:开4:开5:开6:关
netconsole 0:关1:关2:关3:关4:关5:关6:关
network 0:关1:关2:开3:开4:开5:开6:关
4.从服务器安装配置
1.上传mysql安装包
2.执行安装mysql的脚本文件
#!/bin/bash
yum list installed |grep libaio
if [ $? ne 0 ]; then
yum -y install libaio
fi
echo libaio yes
rm -rf /etc/my.cnf
echo remo my.cnf yes
tar -xf mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
echo tar zx yescp -r ~/mysql-8.0.33-linux-glibc2.12-x86_64 /usr/local/mysql
echo copy file to /usr/local/mysql yes
mkdir /usr/local/mysql/mysql-files
echo mysql-files yes
grep mysql /etc/passwd
useradd -r -s /sbin/nologin mysql
chown mysql:mysql /usr/local/mysql/mysql-files
chmod 750 /usr/local/mysql/mysql-files
#/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/
#/usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql8
sed -i '$aexport PATH=/usr/local/mysql/bin:$PATH' /etc/profile
source /etc/profile
[root@master-mysql~]source mysql.sh
3.配置文件
vim /usr/local/mysql/my.cof
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
port=3310
log-error=/usr/local/mysql/data/db01-slave.err
relay-log=/usr/local/mysql/data/relaylog
server-id=11
character_set_server=utf8mb4
5.主从复制之数据同步
master服务器同步到slave服务器
1.停用master服务器msyql服务
service mysql8 stop
2.master删除/usr/local/mysql/data/auto.cnf每安装一个mysql软件,data数据目录都会产生一个auto.cnf文件,里面是一个唯一性编号,相当于每个人的身份证编号。
[root@master-mysql~]#ls
/usr/local/mysql/data/auto.cnf
/usr/local/mysql/data/auto.cnf
[root@master-mysql~]#cat /usr/local/mysql/data/auto.cnf
[auto]
server-uuid=f6421989-5330-11ef-974f-000c29ce78bb
[root@master-mysql~]#rm -rf /usr/local/mysql/data/auto.cnf
3.同步master中的data到slave对应位置
rsync -av /usr/local/mysql/data root@192.168.1.41:/usr/local/mysql/
4.启动主服务器和从服务器
[root@mysql001~]#servicemysql8start
StartingMySQL.. SUCCESS!
[root@slave~]#servicemysql8start
StartingMySQL.Loggingto '/usr/local/mysql/data/db01-slave.err'.. SUCCESS!
5.登录从服务器
[root@mysql001~]#/usr/local/mysql/bin/mysql -P3310 -pQing_tang123
6.主从复制的实现
登录主服务器的mysql
1.master创建账号授权
create user 'slave'@'%' idetified by 'abc_123';
2.授权
grant replication slave on *.* to 'slave'@'%';
3.刷新权限
flush privileges;
4.锁定表
flush tables with read lock;
5.查看master状态,二进制文件的IP地址以及文件名
show master status;
6.在从服务器上修改
mysql> change master to
-> master_host='192.168.1.40', #主服务器ip地址
-> master_user='slave',
-> master_password='abc_123',
-> master_port=3306,
-> master_log_file='binlog.000006', #二进制文件名
-> master_log_pos=866;
7.从服务器
slave start;
show slave status\G
8.在slave服务器获得master服务器的公钥
mysql -uqingtang -pabc_123 -h 192.168.1.40 -P3306 --get-server-public-key
quit
9.登录slave服务器的本地数据库
mysql -pQing_Tang -P3310
停用slave服务,重新设置slave服务
stop slave;
rest slave;
mysql> change master to
-> master_host='192.168.1.40', #主服务器ip地址
-> master_user='slave',
-> master_password='abc_123',
-> master_port=3306,
-> master_log_file='binlog.000006', #二进制文件名
-> master_log_pos=866;
启动slave服务
start slave
show slave status\G