Linux搭建MySQL读写分离架构,读写基于MySQL不同端口实现

一.下载并解压安装MySQL压缩包,采用5.7.16版本

##1. 使用 wget 命令通过 URL 下载 MySQL 5.7.35 版本适用于 Linux 的安装包mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz。以下是使用 wget 命令下载该安装包

   wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz

在这里插入图片描述

2. 要解压 mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz 文件,您可以使用以下命令:

 tar -zxvf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz
3. 重复解压两次解压完成之后重命名为mysql3306+

在这里插入图片描述
mysql3307
在这里插入图片描述

4. 创建3306和3307对应的 .cnf 文件

4.1 mysql3306.cnf
vim /etc/mysql3307.cnf
vim /etc/mysql3306.cnf

[mysqld]
user=mysql
pid-file=/usr/local/mysql3306/data/mysql3306.pid
socket=/var/run/mysql3306/mysqld.sock
port=3306
basedir=/usr/local/mysql3306
datadir=/usr/local/mysql3306/data
server-id=1006
log-bin=mysql-bin
gtid-mode=OFF
enforce-gtid-consistency=false
max_connections=200
symbolic-links=0
log-error=/usr/local/mysql3306/data/mysql3306.err
explicit_defaults_for_timestamp=1
binlog_do_db=swis_prod
[client]
port=3306
socket=/var/run/mysql3306/mysqld.sock
4.2 mysql3307.cnf
vim /etc/mysql3307.cnf
[mysqld]
user=mysql
pid-file=/usr/local/mysql3307/data/mysql3307.pid
socket=/var/run/mysql3307/mysqld.sock
port=3307
basedir=/usr/local/mysql3307
datadir=/usr/local/mysql3307/data
server-id=1007
log-bin=mysql-bin
gtid-mode=OFF
enforce-gtid-consistency=false
max_connections=200
symbolic-links=0
log-error=/usr/local/mysql3307/data/mysql3307.err
explicit_defaults_for_timestamp=1
relay-log=relay-bin
read_only=1
[client]
port=3307
socket=/var/run/mysql3307/mysqld.sock

5.创建用户组及用户和密码

groupadd mysql
 
useradd -g mysql mysql
5.1 授权用户
chown -R mysql.mysql /usr/local/mysql3306
chown -R mysql.mysql /usr/local/mysql3307
6.初始化基础信息,最后一行后面会有个随机的初始密码保存下来一会登录要用(如果忘记了就删掉data重新初始化)
6.1 进入mysql3306的bin目录执行
/usr/local/mysql3306/bin/mysqld --defaults-file=/etc/my3306.cnf  --user=root --basedir=/usr/local/mysql3306 --datadir=/usr/local/mysql3306/data --initialize
6.2 临时密码记得保存

在这里插入图片描述

7. 通过mysqld_safe启动mysql,进行密码设置以及远程连接

/usr/local/mysql3306/bin/mysqld_safe --defaults-file=/etc/my3306.cnf  --basedir=/usr/local/mysql3306 --datadir=/usr/local/mysql3306/data
71 登录mysql3306
/usr/local/mysql3306/bin/mysql -u root -p --socket=/var/run/mysql3306/mysqld.sock

提示
–socket相关错误需要对/var/run/mysql3306/mysqld.sock目录进行mysql用户的授权。并删除data目录重新执行初始化和启动命令
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket’/tmp/mysql.sock’ (2)

sudo chown mysql:mysql /var/run/mysql3306/mysqld.sock
sudo chmod 700 /var/run/mysql3306/mysqld.sock

确保.cnf中的配置都相对于

[mysqld]
socket=/var/run/mysql3306/mysqld.sock

[client]
socket=/var/run/mysql3306/mysqld.sock
7.2 登录mysql

输入刚刚初始化时生成的密码

更改root用户密码, 注意语句后的; 执行语句忘记写了 可以补个空的;回车也可以将语句执行

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
flush privileges;
use mysql;
update user set host='%' where user = 'root';
flush privileges;

8. 安装并配置3307执行以上重复的逻辑保证端口不冲突

安装完成之后查询服务是否正常运行
在这里插入图片描述

9.配置MySQL主从复制,将3306设置为主库,3307设置为从库

  1. 确保主库(3306)的配置 在主库的mysql3306.cnf,确保以下设置:
[mysqld]
log-bin=mysql-bin  # 开启二进制日志
server-id=1        # 主库的唯一ID`
  1. 重启主库服务使配置生效。 创建复制用户: 在主库上执行以下SQL命令,创建一个用于复制的用户,并赋予相应的权限
CREATE USER 'read'@'%' IDENTIFIED BY 'read';
GRANT REPLICATION SLAVE ON *.* TO 'read'@'%';
FLUSH PRIVILEGES;

查看主库是否开启共享数据功能

SHOW MASTER STATUS;

在这里插入图片描述

SHOW MASTER STATUS\G;

在这里插入图片描述

  1. 配置从库(3307在从库的my.ini或my.cnf配置文件中,确保以下设置:
[mysqld]
log-bin=mysql-bin  # 开启二进制日志
server-id=2        # 从库的唯一ID,确保与主库不同
relay-log=relay-bin # 中继日志`

重启从库服务使配置生效。 设置从库复制主库: 在从库上执行以下SQL命令,设置复制主库的相关参数:

CHANGE MASTER TO
MASTER_HOST=‘主库IP’,
MASTER_USER=‘rep’,
MASTER_PASSWORD=‘123456’,
MASTER_LOG_FILE=‘主库的二进制日志文件名’,
MASTER_LOG_POS=日志位置;
这里的主库的二进制日志文件名和日志位置
可以从主库上通过
SHOW MASTER STATUS;命令获取。

在这里插入图片描述

CHANGE MASTER TO 
MASTER_HOST='192.168.202.131',
MASTER_USER='read',
MASTER_PASSWORD='read',
MASTER_LOG_FILE='mysql-bin.000004',
MASTER_LOG_POS=2217;
  1. 启动从库复制:
    在从库上执行以下SQL命令,开始复制主库的数据:
START SLAVE;

监控复制状态:
在从库上执行以下SQL命令,查看复制状态:

SHOW SLAVE STATUS\G;

在这里插入图片描述
确保Slave_IO_Running和Slave_SQL_Running的值都是Yes,表示复制正在正常运行。

10错误提示

1.ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.

错误 ERROR 1794 (HY000): Slave is not configured or failed to initialize
properly. You must at least set --server-id to enable either a master
or a slave. 指出 MySQL
服务器作为复制从服务器(slave)没有被正确配置,或者初始化失败了。这个错误通常发生在尝试设置或启动复制时,但相关的配置参数没有设置或设置不正确。
主服务器(master)和每个从服务器(slave)都需要一个唯一的 server-id。

查看当前实例的server_id

show variables like 'server_id';
2.ERROR 3021 (HY000): This operation cannot be performed with a running slave io thread; run STOP SLAVE IO_THREAD FOR CHANNEL ‘’ first.

MySQL 发现有一个正在运行的从服务器 IO 线程(slave IO
thread)。在这种情况下,如果要执行涉及复制的操作,你需要先停止从服务器的 IO 线程。
登录到 MySQL 数据库服务器上,并使用管理员权限连接到数据库。 执行以下命令来停止从服务器的 IO 线程:

停止对应的io线程和开启对应的io线程

START SLAVE IO_THREAD;
START SLAVE SQL_THREAD;
STOP SLAVE IO_THREAD;
STOP SLAVE SQL_THREAD;
  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值