侧边栏壁纸
  • 累计撰写 154 篇文章
  • 累计收到 0 条评论

生产环境部署mysql8.0.28 主从同步

2025-4-24 / 0 评论 / 11 阅读
资源规划

IP

系统

资源

主机规划

备注

192.168.116.145

centos7.9

2C4G

master

 

192.168.116.135

centos7.9

2C4G

slave

 

环境部署

修改主机名

#修改主机名
hostnamectl set-hostname master
hostnamectl set-hostname slave

关闭防火墙和内核安全机制

#关闭防火墙和selinux
systemctl stop firewalld && systemctl disable firewalld
sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
setenforce 0

清理环境

#删除mariadb数据库,mariadb是mysql的孪生兄弟
rpm -qa | grep mariadb
#删除mysql8的冲突包
rpm -e --nodeps mariadb-libs
#查看是否安装过mysql
rpm -qa | grep -i mysql
#如果安装过mysql需要删除mysql并备份数据
find / -name mysql

# 查询是否存在二进制文件
whereis mysql

#如果安装过需要删除配置文件
rm /etc/my.cnf
#确认是否全部删除mysql
rpm -qa |grep -i mysql

时间同步和资源信息查询

#时间同步
chronyc sources |grep '*'
#查看服务的x86_64架构还是arm架构
uname -m
#或者用这个查看
arch
#创建mysql用户
useradd -M -s /sbin/nologin mysql
#安装依赖包
yum -y install gcc vim wget net-tools lrzsz libaio
部署mysql8
#上传mysql-8.0.28-el7-x86_64.tar.gz并解压数据包
tar zxvf mysql-8.0.28-el7-x86_64.tar.gz 
#移动二进制文件并重命名为mysql
mv mysql-8.0.28-el7-x86_64 /usr/local/mysql
#创建挂在目录
mkdir /data
获取初始密码
#为创建的目录给用户权限
chown -R mysql:mysql /data
#切换到mysql的执行文件目录中
cd /usr/local/mysql/bin
#初始化mysql数据库,最后会有随机密码
./mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/data --initialize
继续另外一台msyql8
#写配置文件
cat>/etc/my.cnf<<EOF
[client]
socket=/data/mysql.sock
[mysqld]
socket=/data/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
port = 3306
basedir=/usr/local/mysql
datadir=/data
max_connections=2048
character-set-server=utf8
default-storage-engine=INNODB
lower_case_table_names=0
max_allowed_packet=16M
log-bin=master-bin
binlog_format=MIXED
server-id=$(openssl rand -base64 4|cksum |cut -c 1-8)
EOF

#设定systemctl管理脚本
cat>/lib/systemd/system/mysqld.service<<'EOF'
[Unit]
Description=mysqld
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.d/init.d/mysqld start
ExecReload=/etc/rc.d/init.d/mysqld restart
ExecStop=/etc/rc.d/init.d/mysqld stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF

#设定环境变量
echo 'export PATH=$PATH:/usr/local/mysql/bin'>> /etc/profile
#创建mysql的执行文件
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
#给执行文件添加可执行权限
chmod +x /etc/rc.d/init.d/mysqld
#添加到config文件中
chkconfig --add mysqld
#刷新环境变量
source /etc/profile
#启动mysql
systemctl start mysqld  && systemctl enable mysqld
#创建软连接
ln -s /usr/local/mysql/bin/mysql /usr/local/bin/
数据库修改密码
#初始化密码

#登录数据库
mysql -uroot -p

#修改密码为123456
alter user 'root'@'localhost' identified with mysql_native_password by '123456';

#查看密码
use mysql;

# 查看用信息
select host,user,authentication_string from user;

#创建远程登录数据权限本地登录数据库
use mysql;

#授权root远程登录
update user set host = '%' where user = 'root';

#查看权限
select host,user from user;

#刷新表
flush privileges;
主从备份
#主节点,远程同步用户
CREATE USER 'master'@'192.168.116.%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'master'@'192.168.116.%';

#刷新库
flush privileges;

# 查看binlog名字和位置编号
show master status;
从节点
CHANGE MASTER TO MASTER_HOST='192.168.116.145',  # 主服务器IP
MASTER_USER='master',                            # 主服务器用户
MASTER_PASSWORD='123456',                        # 主服务器用户密码
MASTER_LOG_FILE='master-bin.000001',             # 主服务器
MASTER_PORT=3306,                                # 端口号默认3306
MASTER_LOG_POS=1156;                             #  位置

CHANGE MASTER TO 
MASTER_HOST='192.168.116.145',
MASTER_USER='master',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master-bin.000001',
MASTER_PORT=3306,
MASTER_LOG_POS=1328;

# 互为主从
CHANGE MASTER TO 
MASTER_HOST='192.168.116.136',
MASTER_USER='master',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master-bin.000001',
MASTER_PORT=3306,
MASTER_LOG_POS=1749;

#查看集群状态
show slave status\G

# 启动主从
start slave;

#查看binlog的编号
show variables like 'server_id';

#修改binlog的编号
set global server_id=2; #此处的数值和my.cnf里设置的一样就行

插入测试数据

create database sqw ;