部署高可用主从读写分离Mysql集群01

[!Tip]
部署 mysql 并且设置主从

转载请注明出处:https://janrs.com/pnfq


部署 mysql 主从做读写分离


1.部署 mysql5.7


1.1 安装依赖


apt install lsb-release gnupg wget -y

1.2 安装源


下载脚本直接运行并打开,打开后选择第一个选项按回车,选择 5.7 版本

cd /home && \
wget http://repo.mysql.com/mysql-apt-config_0.8.13-1_all.deb && \
dpkg -i mysql-apt-config_0.8.13-1_all.deb

选择之后如果需要更改其他配置,执行以下命令:

dpkg-reconfigure mysql-apt-config

更新源

[!NOTE]
如果显示错误:
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 467B942D3A79BD29
,执行以下命令即可:

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29
apt update

1.3 安装

[!NOTE]
安装过程会弹出输入密码的界面,输入即可

apt install mysql-server -y

修改可以远程访问

修改以下的 bind-address 参数为 0.0.0.0

vim /etc/mysql/mysql.conf.d/mysqld.cnf

修改后重启并查看状态

状态显示正常运行即表示已安装好

systemctl restart mysql && systemctl status mysql

开启开机启动服务

systemctl enable mysql

添加远程用户,密码自行修改

GRANT ALL PRIVILEGES ON *.* TO 'john'@'%' IDENTIFIED BY '1100' WITH GRANT OPTION;

刷新权限

flush privileges;

2.设置主从


2.1 Master 主库配置

[!NOTE]
以下在 Master 服务器操作

先停止服务

systemctl stop mysql

开启 binlog ,每台设置不同的 server-id

vim /etc/mysql/mysql.conf.d/mysqld.cnf

添加以下配置

log-bin=mysql-bin
server-id=161

启动服务

systemctl start mysql

进入数据库查看状态

SHOW MASTER STATUS;

显示如下:

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     1862 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

添加从库连接到主库到账号密码

[!NOTE]
此处限制了权限跟 ip 地址

CREATE USER 'slave01'@'192.168.1.162' IDENTIFIED BY '1100';
CREATE USER 'slave02'@'192.168.1.163' IDENTIFIED BY '1100';
GRANT REPLICATION SLAVE ON *.* TO 'slave01'@'192.168.1.162';
GRANT REPLICATION SLAVE ON *.* TO 'slave02'@'192.168.1.163';

添加后查看

use mysql;
select user from user;

显示如下:

+---------------+
| user          |
+---------------+
| john          |
| slave01       |
| slave02       |
| mysql.session |
| mysql.sys     |
| root          |
+---------------+

2.2 Slave 从库配置

[!NOTE]
以下操作需要在两台 Slave 服务器上操作

systemctl stop mysql

同样开启 binlog 并且设置唯一的 server-id

[!NOTE]
server-id 可用 ip 地址最后的数字

vim /etc/mysql/mysql.conf.d/mysqld.cnf

添加以下配置
slave01配置

log-bin=mysql-bin
server-id=162

slave02配置

log-bin=mysql-bin
server-id=163

重启服务
两台都要重启

systemctl start mysql

登录到 Master 主库查看状态,记录下 File 以及 Position

[!NOTE]
注:是在 Master 主库上查看,不是从库

SHOW MASTER STATUS;

显示如下:

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     1862 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

配置从库连接主库的通信信息

[!NOTE]
注意:以下参数中的 MASTER_LOG_FILE 以及 MASTER_LOG_POS 就是上面从主库获取的
MASTER_HOST 就是主库的地址,MASTER_USER 就是上面添加的从库的账号

slave01 服务器上操作

# 进入到 mysql 数据后执行
CHANGE MASTER TO MASTER_HOST='192.168.1.161', MASTER_USER='slave01', MASTER_PASSWORD='1100', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1862;

slave02 服务器上操作

# 进入到 mysql 数据后执行
CHANGE MASTER TO MASTER_HOST='192.168.1.161', MASTER_USER='slave02', MASTER_PASSWORD='1100', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1862;

查看状态
可以看到一个状态信息列表

SHOW SLAVE STATUS\G

重要参数说明:

[!NOTE]
显示以下信息才表示部署主从成功
如果部署后没有报错,但是没显示,可先执行:slave stopslave start 即可

Slave_IO_State: Waiting for master to send event             #从站的当前状态
Slave_IO_Running:  Yes                                      #必须为 Yes.读取主程序二进制日志的I/O线程是否正在运行
Slave_SQL_Running: Yes                                       #必须为 Yes.执行读取主服务器中二进制日志事件的SQL线程是否正在运行。与I/O线程一样
Seconds_Behind_Master                                         #是否为0,0就是已经同步了

测试。在 Master 主库上创建表,然后检查从库是否同步
正常情况下,两台从库会自动跟着创建表,即主从部署成功

CREATE TABLE `goods` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `name` varchar(255) DEFAULT '' COMMENT '商品名称',
  `price` decimal(10,4) DEFAULT 0.0000 COMMENT '商品价格',
  `status` tinyint(2) DEFAULT 1 COMMENT '商品状态',
  `title` varchar(255) DEFAULT '' COMMENT '标题',
  `detail` text DEFAULT NULL COMMENT '详情',
  `stock` int(11) DEFAULT 0 COMMENT '库存',
  `create_time` int(10) DEFAULT 0 COMMENT '创建时间''',
  `update_time` int(10) DEFAULT 0 COMMENT '添加时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';