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复制架构,随时应用场景的复杂,用户还可以通过构建一主多从,双主,多级联动,群组复制方案来满足业务需要。

浙公网安备 33010602011771号