Login
网站首页 > 文章中心 > 其它

MySQL5.7主从复制教程_mysql5.7主从搭建

作者:小编 更新时间:2023-08-11 15:46:24 浏览量:122人看过

简述:主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的 业务数据库、事务处理库,从库做查询库.

复制过程简单的说就是 master 将数据库的改变写入二进制日志,slave同步这些二进制日志,并根据这些二进制日志行数据操作

①.、什么是主从复制

主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库.在最常用的mysql数据库中,支持单向、异步复制.在复制过程中,一个服务器充当主服务器,而另外一台服务器充当从服务器;此时主服务器会将更新信息写入到一个特定的二进制文件中.

并会维护文件的一个索引用来跟踪日志循环.这个日志可以记录并发送到从服务器的更新中去.当一台从服务器连接到主服务器时,从服务器会通知主服务器从服务器的日志文件中读取最后一次成功更新的位置.然后从服务器会接收从哪个时刻起发生的任何更新,然后锁住并等到主服务器通知新的更新.

是确保数据安全;做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据的丢失.

是提升I/O性能;随着日常生产中业务量越来越大,I/O访问频率越来越高,单机无法满足,此时做多库的存储,有效降低磁盘I/O访问的频率,提高了单个设备的I/O性能.

是读写分离,使数据库能支持更大的并发;在报表中尤其重要.由于部分报表sql语句非常的慢,导致锁表,影响前台服务.如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度.

主数据库有个bin log二进制文件,记录了所有增删改SQL语句.(binlog线程)

从数据库把主数据库的bin log文件的SQL语句复制到自己的中继日志relay log(io线程)

MySQL⑤7主从复制教程_mysql⑤7主从搭建

第一段:环境描述

服务器优化注意事项

Ⅰ、服务器的大磁盘必须挂载到/opt目录下,服务的目录以及数据都保存在/opt/software下

Ⅱ、磁盘挂载必须默认写入/etc/fstab

首先在两个服务器上创建两个数据库

第二段:Linux基础配置

# 查看服务器版本
cat /etc/redhat-release
# 查看服务器磁盘空间使用情况
df -h
# 新建文件夹package存放压缩包
mkdir /opt/package
# 新建文件夹software存放解压后的软件
mkdir /opt/software
# 新建文件夹存放项目
mkdir /opt/project
# 新建文件夹apr存放文件
mkdir /opt/software/apr
# 新建文件夹apr-util存放文件
mkdir /opt/software/apr-util

关闭防火墙

# 查看防火墙状态
firewall-cmd --state
# 关闭防火墙(重启服务器会开启)
systemctl stop firewalld.service
# 永久关闭防火墙
systemctl disable firewalld.service

关闭SELinux

# 关闭SELinux修改配置文件需要重启机器:
# 修改/etc/selinux/config 文件
vim /etc/selinux/config
将SELINUX=enforcing 改为:SELINUX=disabled
# 重启机器生效
reboot

配置IP、主机名映射

vim /etc/hosts
1.0.0.11 nwtest1
1.0.0.12 nwtest2
1.0.0.13 nwtest3

设置时间同步

# 联网
# 设置东八区时区为当前时区
rm -rf /etc/localtime
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 手动同步下网络时间
ntpdate -u cn.pool.ntp.org
# 内网状态时间设置
# 查看当前系统时间
date
# 查看硬件时间
hwclock
# 修改当前系统时间
date -s "2023-1-1 8:08:08"
# 修改硬件时间
hwclock --set --date "2023-1-1 8:08:08"
# 同步系统时间和硬件时间
hwclock --hctosys
# 保存时钟
clock -w
# 重启机器生效
reboot

第三段:安装MySQL⑤⑦38

Master/Slave部署?

主从服务器均需要进行本MySQL安装步骤!!!

部署路径:/opt/software/mysql

1、安装MySQL所需的yum源

yum -y install gcc-c++ ncurses-devel cmake make perl gcc autoconf automake zlib libgcrypt libtool bison
# 因为CentOS7操作系统默认安装mariadb-libs库,它与MySQL冲突,影响初始化
yum -y remove mariadb-libs

2、创建MySQL组以及MySQL用户

# 创建MySQL组
groupadd mysql
# 创建MySQL用户
useradd -g mysql mysql
# 设置密码
passwd mysql
# 本机设置为:
123456

3、解压MySQL文件包

# 将MySQL安装包放在opt目录下
cd /opt/package
# 在当前目录解压mysql安装包
tar -zxvf mysql-⑤⑦3⑧tar.gz -C /opt/software/
# 修改MySQL目录名称
mv /opt/software/mysql-⑤⑦38-linux-glibc2.12-x86_64 /opt/software/mysql

4、安装MySQL数据库

# 进行mysql安装目录下
cd /opt/software/mysql
# 新建文件夹并授权
mkdir -p /opt/software/mysql/data
mkdir -p /opt/software/mysql/logs
echo "" > /opt/software/mysql/logs/mysql_err.log
mkdir -p /opt/software/mysql/logbin
mkdir -p /opt/software/mysql/tmp
chown -R mysql:mysql /opt/software/mysql
chmod +x /opt/software/mysql

修改配置文件

/etc/my.cnf <

cat > /etc/my.cnf <
cd /opt/software/mysql/
# 初始化数据库
bin/mysqld --initialize --user=mysql --basedir=/opt/software/mysql --datadir=/opt/software/mysql/data
# 查看MySQL初始密码
grep 'temporary password' /opt/software/mysql/logs/mysql_err.log

5、启动MySQL服务

cd /opt/software/mysql/support-files/
# 然后启动MySQL
./mysql.server start
# 登录MySQL
cd /opt/software/mysql/bin/
./mysql -uroot -p
# 输入密码,初始化产生的密码.进入界面
# 修改root密码
mysql> alter user 'root'@'localhost' identified by 'root';
# 允许远程机器连接
mysql> grant all privileges on *.* to 'root'@'%' identified by 'root';
# 立即生效
mysql> flush privileges;
# 退出
mysql> quit;

MySQL⑤7主从复制教程_mysql⑤7主从搭建

6、配置环境变量

# 修改配置文件
vim /etc/profile
# 在最后面加入
export MYSQL_HOME=/opt/software/mysql
export PATH=$PATH:$MYSQL_HOME/bin
# 使配置文件立即生效
source /etc/profile

7、将MySQL设置为开机自启

# 将 mysql.server 文件复制到 /etc/rc.d/init.d/ 目录下
cp /opt/software/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
# 赋予可执行权限
chmod +x /etc/init.d/mysqld
# 添加为服务
chkconfig --add mysqld
# 查看服务列表
chkconfig --list
# 看到3、4、5状态为开或者为 on 则表示成功,如果是 关或者 off 则执行一下
chkconfig --level 345 mysqld on
# 重启服务器
reboot
# 再次查看服务列表或者查看6603端口号
netstat -na | grep 6603

MySQL⑤7主从复制教程_mysql⑤7主从搭建

MySQL常用命令

# 启动MySQL服务
service mysqld start
systemctl start mysqld
# 关闭MySQL服务
service mysqld stop
systemctl stop mysqld
# 查看MySQL状态
service mysqld status
systemctl status mysqld

第四段:配置MySQL主从

1、Master配置

①.、修改主服务器my.cnf

修改/etc/my.cnf,在[mysqld]模块下添加以下内容

# 主从同步配置
[mysqld]
# 本机数据库 ID 标示,主从配置中ID要唯一
server_id = 1
# MySQL监听端口
port = 6603
# 为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
socket = /opt/software/mysql/mysql.sock
# pid文件所在目录
pid_file = /opt/software/mysql/mysql.pid
# 使用该目录作为根目录(安装目录)
basedir = /opt/software/mysql
# 数据文件存放的目录
datadir = /opt/software/mysql/data
# MySQL存放临时文件的目录
tmpdir = /opt/software/mysql/tmp
# 服务端默认编码(数据库级别)
character_set_server = utf8mb4
# 服务端默认的比对规则,排序规则
collation_server = utf8mb4_general_ci
# 错误日志路径
log_error = /opt/software/mysql/logs/mysql_err.log
# 开启二进制日志功能,binlog数据位置
log_bin = /opt/software/mysql/logbin/mysql_bin
# 混合模式复制
binlog_format = mixed
# 超过7天的binlog删除
expire_logs_days = 7
# binlog每个日志文件大小
max_binlog_size = 1G
# 这个表示只同步某个库, 二进制需要同步的数据库名 (如果没有此项,表示同步所有的库)
# binlog-do-db = xxxx
# 不可以被从服务器复制的库
binlog-ignore-db=mysql
binlog-ignore-db=sys
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schem
### 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
### 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
### 控制binlog的写入频率.每执行多少次事务写入一次
### 这个参数性能消耗很大,但可减小MySQL崩溃造成的损失,为0表示不控制
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1 

service mysqld restart

mysql -uroot -proot

#创建同步用户slave,用户名slave,密码slave@2023
mysql> create user 'slave'@'%' identified by 'slave@2023';
#给同步账户赋予复制权限
mysql> grant replication slave on *.* to 'slave'@'%' identified by 'slave@2023';
#刷新权限
mysql> flush privileges;
# 查看主库的状态
mysql> show master status;

MySQL⑤7主从复制教程_mysql⑤7主从搭建

说明:?

replication 复制权限,也可以是all;

slave 表示从库;

*. 表示同步所有数据库,也可以指定某一个库;

slave 用户仅是mysql数据库的一个认证用户;

% 全网都能登陆访问,可指定也可以设置成某一个网段都可以访问.

2、Slave配置

①.、修改从服务器my.cnf

# 修改/etc/my.cnf,在[mysqld]模块下添加以下内容
# 主从同步配置
#这里server-id的值可以是除1之外的任意数字,切记不能为1
server-id=2
# 其他内容和主库保持一致即可

service mysqld restart

# 登录MySQL
mysql -uroot -proot
# 在mysql命令行输入指令,执行初始化
change master to master_host='1.0.0.11',master_user='slave',master_password='slave@2023',master_port=6603;
# 开启从库(stop slave:关闭从库)
mysql> start slave;
# 查看状态
mysql> show slave status\G;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Slave_IO:复制master主机binlog日志文件里的SQL到本机的relay-log文件里

MySQL⑤7主从复制教程_mysql⑤7主从搭建

还可通过 netstat -nltpa 查看从库与主库通信端口.

千万注意:?

由于这里我们同步的是最新的二进制文件,所以在该二进制文件之前生成的数据库是无法进行同步的;若要将全部数据库同步,需先将所有数据库导出.

第五段:验证MySQL主从

1、在Master主库进行数据库创建,执行建表语句

# 新增数据库datadb
mysql> create database datadb;
# 进入数据库datadb
mysql> use datadb;
# 数据库datadb新增test表结构
mysql> create table test(id int not null,username varchar(32));
# 在test表插入一条数据
mysql> insert into test(id,username) values(1,'root');
mysql> insert into test(id,username) values(2,'从库看得见嘛');
# 刷新权限
mysql> flush privileges;
mysql> quit;

2、在Slave从库上查看是否会自动同步该库,表结构以及数据

# 查看数据库
mysql> show databases;
# 进入数据库datadb
mysql> use datadb;
# 数据库datadb新增test表结构
mysql> create table test(id int not null,username varchar(32));
# 查看表test
mysql> show tables;
# 查询表test内容
mysql> select * from test \G
mysql> quit;

MySQL⑤7主从复制教程_mysql⑤7主从搭建

可以看到,slave完成了对master的复制.

第六段:MySQL主从部署错误记录

错误第一段:show slave status\G;查询后报错:ERROR: No query specified

解决办法:

在\G后面加入;分号虽然查询出来了但是会报错

ERROR:

No query specified

去掉\G后面加;分号就不会报错了.

错误第二段:MySQL主从同步故障:Slave_SQL_Running:No

Slave_SQL_Running: No

①程序可能在slave上进行了写操作;

一般是事务回滚造成的.

mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;

以上就是土嘎嘎小编大虾米为大家整理的相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章