MySQL 5.7上搭建实现一主一从复制简单步骤

MySQL复制功能从3.23版本开始提供,到目前最新版本8.0.23,从版本跨度上看,至少经过5个大版本的打磨,更新迭代,功能越来越强大,也非常稳定。

MySQL复制功能在企业中的应用比较广泛,常用于以下场景:

1.读写分离
通过引流应用读请求到从库,缓解主库高负载下同时承担读写的压力。
2.灾备
主库发生故障,可以迅速切换到备库,将数据库服务中断时间降到最低。
3.数据库维护
可以在从库上进行数据库备份,滚动升级,最大化降低主库服务中断时间。

话不多说,干活!

1.配置规划

主库:
操作系统: CentOS 8.0
主机名: lab1
IP: 192.168.10.128
MySQL: 5.7.33

从库:
操作系统: CentOS 8.0
主机名: lab2
IP: 192.168.10.129
MySQL: 5.7.33

主库原本已经安装好,并处于运行状态。现在要加上从库,实现一主一从复制。


2.安装过程
2.1 操作系统安装与配置
安装好操作系统后,修改主机名为lab2,IP修改为:192.168.10.129
增加用户及组:
groupadd dbadm
useradd -g dbadm mysql

2.2 安装MySQL 5.7.33
2.2.1 解压安装包到安装目录
tar -xvf mysql-5.7.33-el7-x86_64.tar
ln -s mysql-5.7.33-el7-x86_64 5.7.33

2.2.2 配置my.cnf
将配置好的my.cnf文件放在MySQL安装目录,即 /opt/mysql/5.7.33

[mysqld]
#base settings
basedir = /opt/mysql/5.7.33
datadir = /app/mysql/3307/data
innodb_data_home_dir = /app/mysql/3307/innodb
innodb_log_group_home_dir = /app/mysql/3307/innodb/logs
innodb_tmpdir = /app/mysql/3307/innodb/tmpdir
innodb_undo_directory = /app/mysql/3307/innodb/undodir

#server settings
user=mysql
port = 3307
socket = /app/mysql/3307/mysql.pid
log_error = /app/mysql/3307/lab2-mysql.error

#replication settings
server_id=1733307
gtid-mode=on
enforce-gtid-consistency=true

[client]
port = 3307
socket = /app/mysql/3307/mysql.pid

2.2.3 根据my.cnf配置创建相应的目录
注:datadir目录下面必须为空,否则实例初始化会失败。也就是不能规划其它目录,如innodb_data_home_dir,做为datadir的子目录。

mkdir -p /app/mysql/3307/data
mkdir -p /app/mysql/3307/innodb
mkdir -p /app/mysql/3307/innodb/logs
mkdir -p /app/mysql/3307/innodb/tmpdir
mkdir -p /app/mysql/3307/innodb/undodir

chown -R mysql:dbadm /app/mysql/3307

2.2.4 启动MySQL,并初始化实例
进入安装目录,运行mysqld启动数据库服务器并初始化实例
cd /opt/mysql/5.7.33/
bin/mysqld --defaults-file=my.cnf --initialize &

初始化完毕,在错误日志中会有root用户的临时密码

登录MySQL,并修改临时密码
mysql -uroot -p -S /app/mysql/3307/mysql.pid
alter user root@localhost identified by 'mysql'
show databases

至此,MySQL安装及初始化工作都完成了。

3. 配置主从复制
3.1 备份主库
mysqldump -A -R -E --master-data=2 --include-master-host-port -uroot -pmysql -h 127.0.0.1 -P 3307 > lab1_master.mysql

将主库备份文件上传到备库
scp lab1_master.mysql root@192.168.10.128:/lab

3.2 恢复主库备份到从库
mysql -uroot -pmysql -S /app/mysql/3307/mysql.pid < /lab/lab1_master.mysql

导入成功后,检查从库
#1 检查数据库个数,名称是否与主库一致
#2 抽查某些表的记录,是否与主库一致

3.3 配置主从复制
3.3.1 在主库创建用于复制的用户 repl 并赋予权限
grant replication slave on *.* to 'repl'@'%' identified by 'repl'

3.3.2 配置从库
change master to master_host='192.168.10.128',master_port=3307,master_user='repl',master_password='repl',master_log_file='binlog.000018',master_log_pos=348

//复制的起始位置信息< master_log_file='binlog.000018',master_log_pos=348 >可以从备份文件lab1_master.mysql中获得,因为在备份时加了 --master-data=2 选项。

3.3.3 启动从库存
start slave;
show slave status \G;


3.检验结果

3.1 在主库对表进行DML和DDL操作,检查数据是否正常复制到从库

后记:一主一从是最简单的MySQL复制架构,随时应用场景的复杂,用户还可以通过构建一主多从,双主,多级联动,群组复制方案来满足业务需要。

posted @ 2021-02-18 12:04  oldoldman(OOM)  阅读(143)  评论(0)    收藏  举报