mysql主从集群搭建

  |   0 评论   |   0 浏览

原理:主库的所有变更操作(写入更新)都会视为事件,写入二进制日志文件中。从库通过读取主库的二进制日志文件,并在从库中执行这些事件,达到主从同步。

第一步:从官网下载mysql安装包。

第二步:mysql安装包下载完成后,拷贝至虚拟机,并解压安装包,并重命名文件夹名称。

tar  -zxvf mysql-8.0.29-el7-x86_64.tar.gz -C /usr/local/
mv /usr/local/mysql-8.0.29-el7-x86_64 /usr/local/mysql-8.0.29

第三步:创建mysql用户组和用户并修改权限。

groupadd mysql
useradd -r -g mysql mysql

接着创建数据目录并赋予权限,使用的命令如下(注意必须使用mysql用户,不能使用root用户,否则会由于文件从属关系导致mysql启动失败):

mkdir -p  /data/mysql              #创建目录
chown mysql:mysql -R /data/mysql   #赋予权限

第四步:使用命令 vi /etc/my.cnf修改主节点配置文件

[mysqld]
# 设置server-id,唯一值,标识主机,必须与从库不一致
server-id=1

port=3306

basedir=/usr/local/mysql-8.0.29  # mysql安装目录
datadir=/data/mysql/data  # 数据存放目录
socket=/tmp/mysql.sock
log-error=/data/mysql/logs/mysql.err
pid-file=/data/mysql/logs/mysql.pid
#字符编码设置
character_set_server=utf8mb4

# 开启二进制日志,主库必须开启
log-bin=mysql-bin
# 自动删除2592000秒(30天)前的日志
# 8.0以前的版本中这个配置为expire_logs_days,单位为天
binlog_expire_logs_seconds=2592000

# binlog记录的模式
# statement模式不会记录每一条更改语句,节约资源但主从数据可能不一致
# row模式记录每一条更改的语句,日志量非常大
# mixed模式是前两者优点的综合,但日志结构较为复杂
binlog_format=row

#为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M

#过滤,也就是指定哪个数据库不用同步,可以配置多个
binlog-ignore-db=mysql

#需要复制的数据库,可以配置多个
binlog-do-db=test

第五步 :开始初始化数据库。进入mysql的bin目录,我这里是 /usr/local/mysql-8.0.29/bin路径,然后在里面执行下面一行代码(注意里面两个路径必须与你在my.cnf配置文件中设置的一致,否则会报错):

./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql-8.0.29 --datadir=/data/mysql/data --user=mysql  --initialize

第六步:启动mysql服务。注意先将 mysql.server放置到 /etc/init.d/mysql中,可以让dameon来管理Mysql的启动(即也就是service,CentOS7就是syetemctl),可以使用下面的命令复制一份过去,且将 mysql.server修改为mysql,这样便于记忆启动命令:

cp /usr/local/mysql-8.0.29/support-files/mysql.server /etc/init.d/mysql
service mysql start  #启动服务

第七步:启动mysql服务,并修改初始化密码:

./mysql -uroot -p临时密码  #临时密码在/data/mysql/logs/mysql.err文件有
mysql>USE mysql;
mysql>ALTER USER 'root'@'localhost' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY '新密码';
mysql>FLUSH PRIVILEGES; 

第八步:搭建从节点数据库,配置从节点配置文件。

[mysqld]
# 设置server-id,唯一值,标识主机,必须与从库不一致
server-id=2

port=3306

basedir=/usr/local/mysql-8.0.29  # mysql安装目录
datadir=/data/mysql/data  # 数据存放目录
socket=/tmp/mysql.sock
log-error=/data/mysql/logs/mysql.err
pid-file=/data/mysql/logs/mysql.pid
#字符编码设置
character_set_server=utf8mb4

# 开启二进制日志,主库必须开启
log-bin=mysql-bin
# 自动删除2592000秒(30天)前的日志
# 8.0以前的版本中这个配置为expire_logs_days,单位为天
binlog_expire_logs_seconds=2592000

# 需要主从复制的数据库 
replicate-do-db=test
# 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步) 
binlog-ignore-db=mysql
# 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存 
binlog_cache_size=1M
# 主从复制的格式(mixed,statement,row,默认格式是statement。建议是设置为row,主从复制时数据更加能够统一) 
binlog_format=row
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 
slave_skip_errors=1062
# relay_log配置中继日志,默认采用 主机名-relay-bin 的方式保存日志文件 
relay_log=replicas-mysql-relay-bin
# log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
# 防止改变数据(只读操作,除了特殊的线程)
read_only=1

第九步:在主节点创建用户用于从节点同步的用户并授权:

创建用户
mysql>CREATE USER 'mysync'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
//用户授权
mysql>grant replication slave,replication client on *.* to 'mysync'@'%';
//查看主节点状态
mysql>show master status\G

第十步:在从节点配置链接主节信息:

//  配置主节点的同步信息
mysql>change master to master_host='192.168.100.101',master_port=3306, master_user='mysync',master_password='密码',master_log_file='mysql-bin.000002',master_log_pos=4918;
// 启动同步
mysql>start slave;
//  结束同步
mysql>stop  slave;
//查看从节点状态
mysql>show slave status\G

第十一步:测试同步,在主节点创建库和表,在从节点查看是否同步成功。

**第十二步:**设置开机自启。

cp /usr/local/mysql-8.0.29/support-files/mysql.server /etc/rc.d/init.d/
然后赋予可执行权限:chmod +x /etc/init.d/mysql.server
添加为服务: chkconfig --add mysql.server
再去查看chkconfig --list

标题:mysql主从集群搭建
作者:zytops
地址:https://www.zytops.com/articles/2022/06/17/1655452203117.html