mysql主从复制完整

81 阅读2分钟

mysql主从复制

centos7.9

master 192.168.183.174

node 192.168.183.175

关闭防火墙和selinux(两台都执行)


systemctl disable firewalld
sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

然后重启reboot(两台都执行)

安装mysql的脚本(两台都执行)

#!/bin/bash

echo "开始安装MySQL..."

echo "卸载冲突软件包..."
rpm -e postfix-2:2.10.1-9.el7.x86_64
rpm -e mariadb-libs-5.5.68-1.el7.x86_64

echo "检查是否还有mariadb残留..."
rpm -qa|grep mariadb

echo "下载MySQL仓库配置..."
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm

echo "安装MySQL仓库..."
rpm -ivh mysql80-community-release-el7-7.noarch.rpm

echo "更新yum缓存..."
yum clean all
yum makecache

echo "导入MySQL GPG密钥..."
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023

echo "安装MySQL服务器和客户端..."
yum install -y mysql-community-server mysql-community-client

echo "显示MySQL版本..."
mysql -V

echo "MySQL安装完成"
bash 脚本名

主库配置

(master)

在/etc/my.cnf添加
server-id=1			主从服务器必须有不同的 server-id,取值范围:12³²-1,必须为正整数,不能为 0
read-only=0			1代表只读,0代表读写		
log_bin=mysql-bin
binlog_format=ROW

启动mysql

systemctl start mysqld
systemctl enable mysqld
grep "password" /var/log/mysqld.log			获取初始密码
mysql -uroot -p'初始密码'

修改登录密码

ALTER USER 'root'@'localhost' IDENTIFIED BY '密码';

创建用户

create user '用户名'@'%' IDENTIFIED WITH mysql_native_password BY '密码';

WITH mysql_native_password		MySQL 8.0 默认使用 caching_sha2_password 认证插件,需要安全连接(SSL)。使用 mysql_native_password 插件可以避免这个要求

赋权限

GRANT REPLICATION SLAVE ON *.* TO '用户名'@'%';
FLUSH PRIVILEGES;

查看主库状态

SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000004 |     1014 |              |                  |                   |
+---------------+----------+--------------+------------------+-----------------

从库配置

(node)

在/etc/my.cnf添加
server-id=2			主从服务器必须有不同的 server-id,取值范围:12³²-1,必须为正整数,不能为 0
read-only=1			1代表只读,0代表读写
relay_log=mysql-relay-bin
log_bin=mysql-bin

启动mysql

systemctl start mysqld
systemctl enable mysqld
grep "password" /var/log/mysqld.log			获取初始密码
mysql -uroot -p'初始密码'

修改登录密码

ALTER USER 'root'@'localhost' IDENTIFIED BY '密码';

设置主库配置

CHANGE MASTER TO
MASTER_HOST='主库ip',      
MASTER_USER='主库创建的用户',              
MASTER_PASSWORD='主库创建的用户密码',      
MASTER_LOG_FILE='binlog.000004', 		刚才SHOW MASTER STATUS;的内容
MASTER_LOG_POS=1014;              

启动复制

START SLAVE;

检查状态

SHOW SLAVE STATUS\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

配置成功

不管几个从机,配置都是一样的

常见问题

出现错误,先看日志

1.网络不通 #互ping机器ip,无丢包率正常访问

2.pos不正确 #主服务器,登陆数据库重新查看起始偏移量show master status

3.防火墙和selinux #是否放行mysql的服务,建议练习直接关死

4.ID问题 在安装完mysql数据库的时候默认他们的server-id=1 但是在做主从同步的时候需要将ID号码设置不一样才行