MySQL主从复制架构

10 篇文章 0 订阅

什么是主从复制

MYSQL主从同步是目前使用比较广泛的数据库架构,技术比较成熟,配置也不复杂,特别是对于负载比较大的网站,主从同步能够有效缓解数据库读写的压力。

环境规划

在这里插入图片描述

传统的主从复制

安装前准备工作

1、时间同步
2、上传同样的MySQL安装包到服务器中
3、关闭防火墙和selinux

开始实验

在master服务器端安装MySQL

vim mysql.sh

#!/bin/bash
yum install libaio -y
tar -zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz 		#这里填写的是自己的MySQL版本
mv mysql-5.7.36-linux-glibc2.12-x86_64 /usr/local/mysql		#这里填写的是自己的MySQL版本,后面目录为mysql安装目录
useradd -r -s /sbin/nologin mysql
rm -rf /etc/my.cnf
cd /usr/local/mysql
mkdir mysql-files
chown -R  mysql:mysql  /usr/local/mysql
chown 750 /usr/local/mysql
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql &> /root/password.txt
bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data
cp support-files/mysql.server /etc/init.d/mysqld
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile

给这个脚本添加执行权限:chomd 750 ./mysql.sh
执行这个脚本:./mysql.sh
注意脚本文件和MySQL的安装包在同一目录下
vim /etc/my.cnf

[mysqld]
basedir=/usr/local/mysql			#MySQL安装目录
datadir=/usr/local/mysql/data		#mysql数据目录
port=3306
socket=/tmp/mysql.sock
character-set-server=utf8mb4
log-error=/usr/local/mysql/data/mysqld.log		#mysql日志文件
log-bin=/usr/local/mysql/data/binlog			#二进制文件位置
server-id=1
在slave服务器端安装MySQL

vim mysql.sh

#!/bin/bash
yum install libaio -y
tar -zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.36-linux-glibc2.12-x86_64 /usr/local/mysql
useradd -r -s /sbin/nologin mysql
rm -rf /etc/my.cnf
cd /usr/local/mysql
mkdir mysql-files
chown -R mysql:mysql /usr/local/mysql
chown 750 /usr/local/mysql
cp support-files/mysql.server /etc/init.d/mysqld
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile

给这个脚本添加执行权限:chomd 750 ./mysql.sh
执行这个脚本:./mysql.sh
注意脚本文件和MySQL的安装包在同一目录下
vim /etc/my.cnf

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port=3306
socket=/tmp/mysql.sock
character-set-server=utf8mb4
log-error=/usr/local/mysql/data/mysqld.log
relay-log=/usr/local/mysql/data/relaylog
server-id=10

相对于主服务器MySQL的安装部署,从服务器端不需要进行初始化操作,因为器数据来自于主服务器

启动msyql

[root@master data]# service mysql start

登录msyql
先查看mysql密码:cat /root/password.txt (最后一行是密码)

mysql -uroot -p

修改mysql密码

mysql> set password=password('root');
将master主服务器的数据同步到slave从服务器

把master服务器中的/usr/local/mysql/data/auto.cnf

[root@master data]# rm auto.cnf

auto.cnf是mysql的编号,相当于人的身份证

将master服务端的/usr/local/mysql/data目录拷贝到slave服务端/usr/local/mysql

[root@master data]# rsync -av /usr/local/mysql/data root@192.168.156.20:/usr/local/mysql/

同时启动master端和slave端mysql

[root@master data]# service mysql start
[root@slave mysql]# service mysql start
配置master-slave主从同步

在master主服务器创建一个账号,用于同步数据用

mysql> grant replication slave on *.* to 'admin'@'192.168.156.%' identified by 'admin';
mysql> flush privileges;

在master端中锁表,然后查看二进制文件的名称及位置

mysql> flush tables with read lock;
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000003 |      602 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

在slave端,使用changer master to指定主服务器,并执行数据同步

change master to master_host='192.168.156.15',master_user='admin',master_password='admin',master_port=3306,master_log_file='binlog.000003',master_log_pos=602;

master_host master端主机的IP地址
master_user master端主机的user账号
master_password master端主机user密码
master_port master端主机的mysql端口
master_log_file 刚才查看到的log名称
master_log_pos 刚才查看到log对应的position值

在slave端启动slave同步

mysql> start slave;
mysql> show slave status\G

在这里插入图片描述解除master端表解锁

mysql> unlock tables;

注意;不要在slave端写入数据,如果在slave端写入数据,会打破主从架构
如果不小心在slave端写入的数据不是很多,可以使用sql_slave_skip_counter跳过语句,如果写入的数量较多,需要重新搭建

mysql> set global sql_slave_skip_counter=n		//跳过n条事务
mysql> stop slave;
mysql> start slave;

基于GTIDs的主从架构(基于innodb引擎)

什么是GTIDs以及其特点

1、GTIDs:全局事务表示符,是mysql5.6新加入的一项技术
2、当使用GTIDs时,每一个事务都可以被识别并且跟踪
3、添加新的slave或者当发生故障需要将master身份迁移到slave上时,都无需考虑哪一个二进制以及哪个position值,极大简化了相关操作
4、GTIDs是完全基于事务的,因此不支持MYISAM存储引擎
5、GTID由source_id和transaction_id组成:
source_id来自于server_uuid,可以在auto.cnf中看到
transaction_id是一个序列数字,自动生成

使用GTIDs的限制条件有哪些

1.不支持非事务引擎(MYISAM),因为可能会导致多个gtid分配给同一个事务
2.ceate table … select语句不支持
3.create/drop temporary table 语句不支持
4.必须使用enforce-gtid-consistency参数
5.sql-slave-skip-counter不支持跳过语句
6.GTID复制环境中必须要求统一开启GTID或者关闭GTID
7.在mysql5.6.7之前,使用mysql_upgrade命令会出现错误

基于GTIDs的主从复制架构
1修改配置文件支持GTIDs
master端:vim /etc/my.cnf

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port=3306
socket=/tmp/mysql.sock
character-set-server=utf8mb4
log-error=/usr/local/mysql/data/mysqld.log
log-bin=/usr/local/mysql/data/binlog
server-id=1
gtid-mode=on
log-slave-updates=1
enforce-gtid-consistency

slave端:
rm -rf /usr/local/mysql/data/binlog.*
vim /etc/my.cnf

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port=3306
socket=/tmp/mysql.sock
character-set-server=utf8mb4
log-error=/usr/local/mysql/data/mysqld.log
relay-log=/usr/local/mysql/data/relaylog
server-id=10
log-bin=/usr/local/mysql/data/binlog
gtid-mode=on
log-slave-updates=1
enforce-gtid-consistency
skip-slave-start

1.开启GTIDs需要在master和slave上都配置gtid-mode,log-bin,log-slave-updates,enforce-gtid-consistency(在5.6.9之前这个参数为disable-gtid-unsafe-statement)
2.slave还需要增加skip-slave-start参数,目的是开启的时候,先不开启slave,先做一些配置
3.基于GTIDs复制从服务器必须开启二进制文件

重新启动mysql服务

[root@master ~]# service mysql start
[root@slave ~]# service mysql start

主从配置为只读模式
slave和master端:

mysql> set @@global.read_only=on;

slave端配置change master to

mysql> stop slave;
mysql> restop slave;
mysql> change master to master_host='192.168.156.15',master_user='admin',master_password='admin',master_port=3306,master_auto_position=1;
mysql> start slave;
mysql> show slave status\G

关闭主从服务器的只读模式
master和slave端

mysql> set @@global.read_only=off;

查看主从架构是否成功
slave端:

mysql> show slave status\G

在这里插入图片描述已经成功

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值