前言:
上一次,使用docker安装了mysql集群,这一次使用tar包普通方法安装mysql集群。安装的版本是mysql-8.0.28-el7-x86_64.tar.gz。
注意:开放3306端口,三台服务器都要开放
firewall-cmd --zone=public --add-port=3306/tcp --per
firewall-cmd --reload
firewall-cmd --list-all
安装步骤:
一.下载tar包
二.主数据库服务器(192.168.88.109)
mkdir /finedo;
rz -be;
解压tar包
tar -zxvf mysql-8.0.28-el7-x86_64.tar.gz
给解压好的mysql,改名
mv mysql-8.0.28-el7-x86_64 mysql8.0
创建mysql用户组和用户并修改权限
groupadd mysql
useradd -r -g mysql mysql
创建存储数据文件
mkdir -p /finedo/data/mysql
chown mysql:mysql -R /finedo/data/mysql #赋予权限
创建my.cnf文件,一般放在/etc目录下
vim /etc/my.cnf
添加内容
[mysqld]
bind-address=0.0.0.0
#禁用替代存储引擎、严格模式,如果一个语句产生一个错误,则返回错误并且中断后续语句的执行。
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
port=3306
mysqlx_port = 33060
user=mysql
character_set_server=utf8mb4
#mysql 服务ID,保证整个集群环境中唯一
server-id=1
#mysql binlog 日志的存储路径和文件名
log-bin=mysql-bin
#是否只读,1 代表只读, 0 代表读写
read-only=0
#忽略的数据, 指不需要同步的数据库
binlog-ignore-db=mysql
#二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
# 写缓存多少次,刷一次磁盘,默认 0 表示这个操作由操作系统根据自身负载自行决定多久写一次磁盘
# 1 表示每一条事务提交都会立即写磁盘,n 则表示 n 个事务提交才会写磁盘
sync_binlog=0
#设置binlog_format格式mixed为混合模式(mixed, statement, row)
binlog_format=mixed
#跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
#如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
symbolic-links=0
explicit_defaults_for_timestamp=true
basedir=/finedo/mysql8.0
datadir=/finedo/data/mysql
socket=/tmp/mysql.sock
log-error=/finedo/data/mysql/mysql.err
pid-file=/finedo/data/mysql/mysql.pid
切换到/finedo/mysql8.0/bin目录下
cd /finedo/mysql8.0/bin
执行以下命令:
./mysqld --defaults-file=/etc/my.cnf --basedir=/finedo/mysql8.0/ --datadir=/finedo/data/mysql/ --user=mysql --initialize
切换到/support-files/目录下
cd /finedo/mysql8.0/support-files/
执行:
./mysql.server start
切换到 /finedo/mysql8.0/bin/目录下
cd /finedo/mysql8.0/bin/
执行:
./mysql -uroot -p
查看初始化密码:cat /finedo/data/mysql/mysql.err
执行以下代码将root密码改为123456
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
配置远程连接
use mysql;
update user set host='%' where user='root';
flush privileges;
远程可连接
至此,主数据库服务器安装完成。
三、安装从数据库服务(192.168.88.108)
同上:
mkdir /finedo;
rz -be;
解压tar包
tar -zxvf mysql-8.0.28-el7-x86_64.tar.gz
给解压好的mysql,改名
mv mysql-8.0.28-el7-x86_64 mysql8.0
创建用户组
groupadd mysql
useradd -r -g mysql mysql
创建存储数据文件
mkdir -p /finedo/data/mysql
chown mysql:mysql -R /finedo/data/mysql #赋予权限
创建my.cnf文件,一般放在/etc目录下
vim /etc/my.cnf
添加内容
[mysqld]
#禁用替代存储引擎、严格模式,如果一个语句产生一个错误,则返回错误并且中断后续语句的执行。
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
port=3306
mysqlx_port = 33060
server_id=2
character_set_server=utf8mb4
#指定不需要同步的数据库名称
binlog-ignore-db=mysql
#开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
#log-bin=/finedo/data/mysql
log-bin=mysql-slave-bin
#是否只读,1 代表只读, 0 代表读写
read-only=1
#忽略的数据, 指不需要同步的数据库
binlog-ignore-db=mysql
#relay_log配置中继日志
relay_log=slave-relay-bin
#log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
#设置二进制日志使用内存大小(事务)
binlog_cache_size=10M
#设置binlog_format格式mixed为混合模式(mixed, statement, row)
binlog_format=mixed
#二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=0
#跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
#如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
basedir=/finedo/mysql8.0
datadir=/finedo/data/mysql
socket=/tmp/mysql.sock
log-error=/finedo/data/mysql/mysql.err
pid-file=/finedo/data/mysql/mysql.pid
切换到/finedo/mysql8.0/bin目录下
cd /finedo/mysql8.0/bin
执行以下命令:
./mysqld --defaults-file=/etc/my.cnf --basedir=/finedo/mysql8.0/ --datadir=/finedo/data/mysql/ --user=mysql --initialize
切换到/support-files/目录下
cd /finedo/mysql8.0/support-files/
执行:
./mysql.server start
切换到 /finedo/mysql8.0/bin/目录下
cd /finedo/mysql8.0/bin/
执行:
./mysql -uroot -p
查看初始化密码:cat /finedo/data/mysql/mysql.err
执行以下代码将root密码改为123456
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
配置远程连接
use mysql;
update user set host='%' where user='root';
flush privileges;
远程可连接
至此,一台从数据库安装成功。
下面安装第二台从数据库,步骤和上面一样,我把my.cnf文件粘贴出来:
他们的区别就是server_id=?不同,不能相同
[mysqld]
#禁用替代存储引擎、严格模式,如果一个语句产生一个错误,则返回错误并且中断后续语句的执行。
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
port=3306
mysqlx_port = 33060
server_id=3
character_set_server=utf8mb4
#指定不需要同步的数据库名称
binlog-ignore-db=mysql
#开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
#log-bin=/finedo/data/mysql
log-bin=mysql-slave-bin
#是否只读,1 代表只读, 0 代表读写
read-only=1
#忽略的数据, 指不需要同步的数据库
binlog-ignore-db=mysql
#relay_log配置中继日志
relay_log=slave-relay-bin
#log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
#设置二进制日志使用内存大小(事务)
binlog_cache_size=10M
#设置binlog_format格式mixed为混合模式(mixed, statement, row)
binlog_format=mixed
#二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=0
#跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
#如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
basedir=/finedo/mysql8.0
datadir=/finedo/data/mysql
socket=/tmp/mysql.sock
log-error=/finedo/data/mysql/mysql.err
pid-file=/finedo/data/mysql/mysql.pid
接入下文,配置主从复制:
切换到主数据库服务器上(192.168.88.109):
创建一个用于复制的用户:
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;
‘slave’@‘%’ :replication_user是将要用于复制的用户,‘%’ 表示任何主机都可以连接,根据需要可以限制特定主机。
‘123456’: 应替换为复制用户的实际密码。
查看用户:
select user from mysql.user;
输入一下命令:查看:
show master status ;
好了,切换到从数据库(191.168.88.108)
登录数据库
进入从库,指定主库的ip、账号密码、端口、日志文件、 偏移量,mysql8.x的密码加密默认用的 caching_sha2_password方式,加上get_master_public_key来解决认证失败问题。
命令:
change master to master_host= '192.168.88.109', master_user='slave', master_port=3306, master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=157, get_master_public_key=1;
开启同步
start slave;
查看同步的状态,成功后两个running都为yes。
show slave status \G;
一主一从集群搭建完毕,
另一台从库配置步骤与上一致,不写了:
至此搭建完毕,然后测试一下。
主节点创建一个数据库,查看能不能同步到两台从节点上。
从节点一:
从节点二:
一主双从测试完成。