暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Mysql主从复制架构实战(一)

踱岚视角 2024-09-19
84

开篇语:这些年做的项目很多,一直很忙,很少将实战中的一些所思所想进行提炼总结,从今日起,付之行动。

理论少讲,直接上干货,按步骤操作就可以操作。


一、环境规划

1.1、操作系统


Linux ubuntu2204 5.15.0-119-generic #129-Ubuntu SMP  Fri Aug 2 19:25:20 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

注:主从库尽量保持一致。

1.2、数据库版本

mysql  Ver  8.0.39-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))

注:主从库尽量保持一致。

1.3、存储规划

项目

项目值

备注

数据库配置文件目录

/etc/mysql

按实际调整

数据库数据存储目录

/var/lib/mysql

按实际调整

数据库日志文件目录

/var/log/mysql

按实际调整

数据库启动脚本目录

/etc/systemd/system

/etc/init.d

注:主从库尽量保持一致。

1.4、IP地址

服务器

主机名

IP地址

端口号

备注

主库

Master

192.168.56.18

3306

按实际调整

从库

Slave

192.168.56.19

3306

按实际调整

1.5、主从复制数据库初始化方

本次采用MYSQLDUMP对主库进行逻辑备份,然后在从库上进行还原的方式进行主从复制初始化工作。

当然也可以通过XTRABACKUP进行主库物理备份,然后在从库上进行还原的方式进行主从复制初始化工作。

也可以通过clone技术在线搭建主从复制环境。

在后续的文章中会逐一介绍。

1.6、主从复制机制

本次采用基于row的模式对主库进行同步复制到备库。

当然也可以通过statementmixedGTID等复制方式进行主从同步,在后续的文章中会逐一介绍。

1.7、主从复制模式

本次采用默认的复制模式,异步复制,主服务器提交事务后立即返回,而不等待从服务器确认。

当然也可以设置为半同步复制,完全同步复制模式,在后续的文章中会逐一介绍。

1.8、数据库参数

参数名

主库

从库

备注

basedir




datadir




character-set-server

utf8mb4

utf8mb4


lower-case-table-names

1

1


default_authentication_plugin

mysql_native_password

mysql_native_password


server-id

1

2


log-bin

mysql-bin

mysql-bin


binlog-ignore

sys,mysql,

information_schema,performance_schema

sys,mysql,

information_schema,performance_schema

可逗号分隔,也可写多条

binlog-do-db

mydb

mydb

多数据库写多条

replication-do-table




replication-ignore-table

格式:库名.表名

格式:库名.表名

多表写多条

binlog_format

row

row


relay-log

mysql-relay

mysql-relay


log-error

/var/log/mysql/error.log

/var/log/mysql/error.log


port

3306

3306


expire_logs_days

14

14


slow_query_log

1

1


slow_query_log_file

/var/log/mysql/mysql-slow.log

/var/log/mysql/mysql-slow.log


long_query_time

2

2


max_binlog_size

100M

100M


read-only

0

1



二、配置步骤

2.1、主库侧按照上表进行数据库参数设置

2.2、从库侧按照上表进行数据库参数设置

2.3、主库侧创建同步专属账号并授权

CREATE USER 'slave'@'%' IDENTIFIED WITH  mysql_native_password BY 'mysql123456';

 

GRANT REPLICATION SLAVE,replication client  ON *.* TO 'slave'@'%';

 

flush privileges;

 

2.4、主从侧数据库重启

主库:systemctl restart mysql

从库:systemctl restart mysql


2.5、对主库进行备份并拷贝至从库

2.5.1、主库没有业务数据是新库时

可以直接跳过本步骤,直接执行下一步;

2.5.2、主库已有业务数据且正在运行时

2.5.2.1、主库开启锁表模式,防止备份期间数据写入

flush tables with  read lock;  


2.5.2.2、备份需要同步的数据库

mysqldump --lock-all-tables --all-databases  --flush-logs --master-data=2 > root/allsql.sql

 

lock-all-tables:锁表

all-databases:备份所有库

flush-logs:切换日志

master-data:备份文件记录日志及位置


2.5.2.3、将备份文件拷贝至从库

scp allsql.sql  root@192.168.56.19:/tmp

 


2.5.2.4、在从库侧进行数据库恢复

mysqldump -uroot -p -A > allsql.sql

 

这种方式就是数据库恢复时间比较长,后期会介绍利用XtrabackupGTIDclone方式来进行同步。


2.6、查看主库的偏移量|二进制文件名

2.6.1、主库没有业务数据查看方式

show master status;

2.6.2、从库通过备份恢复初始化查看方式

head -n 30 allsql.sql

 

找到CHANGE  MASTER TO条目,记录下binlogpos信息;


2.7、在从库执行同步配置

change master to master_host='192.168.56.18',master_user='slave',master_password='mysql123456',master_log_file='binlog.000005',master_log_pos=157;

 

master_host为主服务器的ip

master_user为连接主服务器的用户名;

master_password为连接主服务器的密码;

master_log_file为要同步的日志文件file,即对应上面主服务器查看时的File字段;

master_log_pos为要同步日志文件的位置,即对应上面主服务器查看时的Position字段;


2.8、在从库侧开启同步slave进程

start slave;

2.9、在从库侧查看slave状态

start slave;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

都为Yes则代表配置成功。

2.10、关闭主库侧锁表模式

unlock tables;

 

仅在前面执行了主库侧锁表操作的场景才执行本步骤。


三、数据同步测试

3.1、在主库侧mydb创建一个test

use mydb;

create table test(id int);

3.2、在从库侧查看同步情况

use mydb;

show tables;

3.3、在主库侧给表mydb.test插入记录

use mydb;

insert into test(id) values(1);

insert into test(id) values(2);

insert into test(id) values(3);

insert into test(id) values(4);

select count(1) from test;

commit;

3.4、在从库侧确认mydb.test记录同步情况

use mydb;

select count(1) from test;

3.5、再次查看主从库同步情况

3.5.1、主库侧

show master status\G;

3.5.2、从库侧

show slave status\G;

文章转载自踱岚视角,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论