mysql主从复制

目录

1.理论知识

1.备份的三种类型

2.复制原理

3.复制架构体系

2.环境准备 

1.环境规划

2.前期准备

     3.主服务器配置

1.上传mysql安装包到mstaer和slave

2.编写mysql安装脚本

3.执行脚本

4.编写配置文件

5.重启服务

6.设置开机自启

4.从服务器安装配置

5.主从复制之数据同步

6.主从复制的实现


1.理论知识

1.备份的三种类型

        1.物理备份

        2.逻辑备份

        3.热备份

2.复制原理

        1. replication,可以实现将数据从一台数据库服务器(mster)复制到多台数据库服务器slave;

        2. 默认情况下,replication属于异步复制,所以无需长连接;

        3.工作原理

2da5ef9117bc4a4d94b3d4a274b72619.png

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只接受读。

2ec6938f556842b988519d589bbd9eaf.png

2.级联复制

可以分担读的压力,但只要直接服务器出现故障,就瘫痪了。

c8b1ac10dc554d2fb939a3cdd1e14947.png

3.并联复制---一主多从

解决了单点故障问题,承担了更多读的压力,但从服务器都从主服务器读数据,主服务器的压力更大了。

57280539cc2f49fcb5b59317bac909fb.png

4.双主复制

看起来可以同时接受读写,实际工作中只有一台服务器在工作,另一台只接受读。

4e2b9cc13c5d4fef8c9fe73c71042075.png

2.环境准备 

普通的ab复制,使用最基本的架构M-S,两者的数据库版本必须一致。

1.环境规划

编号主机名称主机ip地址角色信息
1master-mysql192.168.1.40主服务器
2slave-mysql192.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

7ec797b889ec4c6b86514f39579c870c.png

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

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值