MySQL集群配置
MySQL数据同步
[参考链接](https://www.cnblogs.com/phpstudy2015-6/p/6687480.html#_label0)
[参考链接](https://www.cnblogs.com/phpstudy2015-6/p/6687480.html#_label13)
准备3台服务器
192.168.0.163(MASTER)
192.168.0.167(SLAVE)
192.168.0.173(SLAVE)
获取源码资源包(3台服务器均执行)
wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm
安装源码资源包(3台服务器均执行)
rpm -ivh mysql57-community-release-el7-10.noarch.rpm
通过资源包安装mysql(3台服务器均执行)
yum install mysql-server -y
echo deadline > /sys/block/sda/queue/scheduler
修改my.conf(3台服务器均执行)
vim /etc/my.cnf
[client]
default-character-set = utf8mb4
[mysqld]
port = 3306
symbolic-links=0
slow_query_log = 1
long_query_time = 1
explicit_defaults_for_timestamp = 1
datadir = /data/mysql
secure_file_priv = /tmp
default_storage_engine = InnoDB
socket = /var/lib/mysql/mysql.sock
log-error = /var/lib/mysql/mysql.log
slow_query_log_file = /var/lib/mysql/mysql-slow.log
ESC
:wq
# MASTER服务器[mysqld]下加上
server-id = 1
binlog-format = Row
log-bin = /data/mysql/mysql-bin.log
# SLAVE服务器[mysqld]下加上
# 192.168.0.167(SLAVE)
server-id = 2
relay-log=bogon-relay-bin
# 192.168.0.173(SLAVE)
server-id = 3
relay-log=localhost-relay-bin
# 这里一定要注意
relay-log = [服务器名]-relay-bin
添加mysql用户(3台服务器均执行)
user add -s /sbin/nologin -M mysql
创建数据文件目录、所属组、用户改为mysql(3台服务器均执行)
mkdir /data/
mkdir /data/mysql/
mkdir /var/run/mysqld/
chown -R mysql:mysql /data/mysql/
chown -R mysql:mysql /var/lib/mysql/
chown -R mysql:mysql /var/run/mysqld/
chown -R mysql:mysql /var/lib/mysql-files/
chown -R mysql:mysql /var/lib/mysql-keyring/
启动数据库,生成socket文件(3台服务器均执行)
systemctl enable mysqld
systemctl start mysqld
# 因为配置文件中指定了
log-error = /var/lib/mysql/mysql.log
# 所以初始密码在如下文件中
/var/lib/mysql/mysql.log
cat /var/lib/mysql/mysql.log|grep password
# 结果显示
A temporary password is generated for root@localhost: *********
修改数据库初始密码(3台服务器均执行)
mysql -u root -p
# 输入原始密码
*********
# 设置允许使用弱密码
SET GLOBAL validate_password_policy=0;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root12345';
QUIT;
初始化数据库(3台服务器均执行)
# 如果是数据库【安装】则只执行下面这步(除了密码一律选择Y)
mysql_secure_installation
# 如果是数据库【升级】则只执行下面这步(*********表示数据库之前的密码)
mysql_upgrade -u root -p
*********
配置防火墙(3台服务器均执行)
systemctl enable firewalld
systemctl start firewalld
firewall-cmd --permanent --zone=public --add-port=3306/tcp
firewall-cmd --reload
接下来就是数据同步相关的处理
创建从服务器(SLAVE服务器、读服务器)用户
# 192.168.0.167(SLAVE)
# 192.168.0.173(SLAVE)
GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'192.168.0.%' IDENTIFIED BY 'GENGzhihuan123' WITH GRANT OPTION;
FLUSH PRIVILEGES;
创建主服务器允许哪些从服务器访问
# 192.168.0.163(MASTER)
GRANT REPLICATION SLAVE ON *.* TO 'mysql'@'192.168.0.%' IDENTIFIED BY 'GENGzhihuan123';
FLUSH PRIVILEGES;
查看二进制文件名与位置
# 192.168.0.163(MASTER)
SHOW MASTER STATUS;
从服务器中指定二进制文件路径
# 192.168.0.167(SLAVE)
# 192.168.0.173(SLAVE)
CHANGE MASTER TO
MASTER_HOST='192.168.0.163',
MASTER_USER='mysql',
MASTER_PASSWORD='GENGzhihuan123',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=154;
# 这里注意
# MASTER_HOST: 主服务器IP
# MASTER_USER: 主服务器允许从服务器访问的用户
# MASTER_PASSWORD: 主服务器允许从服务器访问的密码
# MASTER_LOG_FILE: 主服务器执行SHOW MASTER STATUS;后的File字段的值
# MASTER_LOG_POS: 主服务器执行SHOW MASTER STATUS;后的Position字段的值
SHOW SLAVE STATUS\G
# 如果有如下状态
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes
# 表示配置成功!!!
在主服务器中创建数据库,查看从服务器是否同步产生了相同的数据库
在主服务器中创建数据表,查看从服务器是否同步产生了相同的数据表
在主服务器表中创建数据,查看从服务器表是否同步产生了相同的数据
如果以上3个步骤正常,则主从服务器搭建成功
为了能够让所有服务器分担数据查询的压力,我们这样做
# 以下方案可以不安装mysql-proxy、lua实现查询压力的分担,对于
# 读取要求高的网站使用较合理,但如果数据库设计中如果索引比较
# 多、写入操作频繁,则要使用读写分离方案
# 192.168.0.163(MASTER)
GRANT ALL PRIVILEGES ON *.* TO 'writer'@'192.168.0.%' IDENTIFIED BY 'GENGzhihuan123' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# 192.168.0.167(SLAVE)
# 192.168.0.173(SLAVE)
GRANT SELECT ON *.* TO 'reader'@'192.168.0.%' IDENTIFIED BY 'GENGzhihuan123' WITH GRANT OPTION;
FLUSH PRIVILEGES;
为了实现读写分离方案,这里要涉及两个工具mysql-proxy、lua