[!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 stop
再slave 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='商品表';
发表回复