目录
1. 话不多说直接先看版本
安装前确认环境
$ rpm -qa | grep mariadb
$ rpm -e -v --nodeps mariadb-libs-5.5.68-1.el7.x86_64
2. 安装配置
先说明,我三台机器的IP配置如下:
192.168.32.128 192.168.32.129 192.168.32.130
创建目录先把文件上传,mysql 和node 安装包每个节点均需拷贝,manager 包只拷贝到manager 节点即可,我都放了,因为我复制的时候没想好那个节点做manager。
//在三台机器上面执行
$ mkdir -p /home/local/mysql
//开启防火墙端口
$ firewall-cmd --add-port=3306/tcp --permanent
$ firewall-cmd --reload
//关闭selinux
$ sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
$ setenforce 0
添加用户
$ groupadd mysql
$ useradd -r -g mysql mysql
3. 解压安装mysql
$ mkdir -p /usr/local/mysql/{data,log}
//用自己的的上传路径
$ tar -xvf /home/local/mysql/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz -C /usr/local/mysql/ --strip-components 1
备注:
-C表示解压指定目录如:当前目录/usr/local/mysql/
--strip-components N 表示删除目录结构(n=1表示删除最外层结构)
查看MySQL文件内容,别跳着走,跟着我的节奏
$ ll /usr/local/mysql/
3.1 设置开机启动
$ cp -a /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
$ chmod +x /etc/rc.d/init.d/mysqld
$ chkconfig --add mysqld
$ chkconfig --list
3.2 设置/etc/profile配置文件
$ vi /etc/profile
//加在文件最后
$ export PATH=$PATH:/usr/local/mysql/bin
$ source /etc/profile
//配置完看看环境变量
$ echo $PATH
3.3 修改my.cnf 文件
vim /etc/my.cnf
注意 :以下内容必须全部拷贝, 包括[mysqld]
|
3.4 初始化无密码登录密码、授权
$ /usr/local/mysql/bin/mysqld --initialize-insecure
$ chown -R mysql.mysql /usr/local/mysql
$ chmod -R 777 /usr/local/mysql
3.5 启动及查看日志
$ service mysqld start
$ tail -f /usr/local/mysql/log/error.log
3.6 登录修改密码,安装半同步插件
随机密码生成
cat /dev/urandom | LC_ALL=C tr -dc "[:graph:]" | fold -w 10 |head -2 > ./shard.key
$ mysql -uroot -p
$ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Root2020@';
$ CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Root2020@';
$ GRANT ALL ON *.* TO 'root'@'%';
$ FLUSH PRIVILEGES;
//开始安装半同步插件
$ install plugin rpl_semi_sync_master SONAME 'semisync_master.so';
$ install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';
创建同步用户,MHA用户与数据半同步用户一起创建,在每台机器都需要执行,我这是开发环境,生成环境请改密码,被黑了,可别来找我
,注意: 别写成我的IP导致最后通信失败了
mysql -uroot -pRoot2020@
use mysql;
select user,host from user;
CREATE USER 'repl'@'192.168.32.%' IDENTIFIED BY 'Root2020@';
ALTER USER 'repl'@'192.168.32.%' IDENTIFIED WITH mysql_native_password BY 'Root2020@';
grant replication slave on *.* to repl@'172.168.9.%';
CREATE USER 'manager'@'192.168.32.%' IDENTIFIED BY 'Root2020@';
grant all on *.* to manager@'192.168.32.%';
ALTER USER 'manager'@'192.168.32.%' IDENTIFIED WITH mysql_native_password BY 'Root2020@';
FLUSH PRIVILEGES;
以上操作在三台机器需要全部完成,操作完成后进行主从数据半同步测试
4.数据半同步配置
修改三台机器的my.cnf配置数据半同步,在文件尾追加增加如下配置:
#server_id 每台机器需要不同,随机,自增都可以 //以下配置拷贝至128节点my.cnf #master节点
|
//以下配置拷贝至129节点my.cnf #slave 1 主机新增以下配置,这个节点用来做master高可用切换
|
//以下配置拷贝至130节点my.cnf
|
配置完成后重启服务,这里有个中继日志,用来干啥,在集群恢复的时候详细说
查看半同步状态
mysql -uroot -pRoot2020@
show variables like '%rpl_semi_sync%';
show status like '%rpl_semi_sync%';
#关于上个命令查看到的信息,有几个状态值得关注,将在下面写下来 rpl_semi_sync_master_status :显示主服务是异步复制模式还是半同步复制模式,ON为半同步; rpl_semi_sync_master_clients :显示有多少个从服务器配置为半同步复制模式; rpl_semi_sync_master_yes_tx :显示从服务器确认成功提交的数量 rpl_semi_sync_master_no_tx :显示从服务器确认不成功提交的数量 rpl_semi_sync_master_tx_avg_wait_time :事务因开启 semi_sync ,平均需要额外等待的时间 rpl_semi_sync_master_net_avg_wait_time :事务进入等待队列后,到网络平均等待时间 |
4.1 创建主从半同步
登录master主机,我现在定了就128啦
|
在129,130执行从节点配置与主节点建立关联
mysql -uroot -pRoot2020@
change master to
master_host='192.168.32.128',
master_port=3306,
master_user='repl',
master_password='Root2020@',
master_log_file = 'mysql-bin.000001',
master_log_pos=156,
get_master_public_key=1;
start slave;
FLUSH PRIVILEGES;
配置完成后重启服务,查看节点配置
看到如下状态服务半同步主从建立成功
看到主节点注册成功两个从节点
看到两个从节点状态正常
可能遇到的问题,及解决方案
Q1: Slave_IO_Running:Connecting;Slave_SQL_Running:Yes ? A1: 从几个点来排除:具体问题具体分析 1.网络不通 2.账户密码错误 3.防火墙 4.mysql配置文件问题 5.主服务器mysql权限 6.创建slave关联时IP错误,或者配置错误 Q2:Slave_IO_Running:No; The slave I/O thread stops because master and slave have equal MySQL server UUIDs ? 这个问题是我自己把虚拟机做克隆,mysql的UUID搞成一样的了,所以注册不过去,解决办法: vim /usr/local/mysql/data/auto.cnf 修改UUID,重启服务 Q3: 遇见问题不要慌,仔细看看那里配置出错了,具体问题具体分析。
5.mysql 主从数据不一致,提示: Slave_SQL_Running: No 的解决方法
在slave服务器上通过如下命令
mysql> show slave status\G;
显示如下情况:表示slave不同步
Slave_IO_Running: Yes
Slave_SQL_Running: No
解决方法一(忽略错误,继续同步):
- 先停掉slave
mysql> stop slave; - 跳过错误步数,后面步数可变
mysql> set global sql_slave_skip_counter=1; - 再启动slave
mysql> start slave; - 查看同步状态
mysql> show slave status\G;
解决方法二(重新做主从,完全同步):
- 先进入主库进行锁表,注意窗口不要关闭
mysql> flush table with read lock; - 把数据进行备份
mysqldump -uroot -p –opt -R 数据库 > /data/bak.sql - 再新开个窗口,查看主数据库信息
1. mysql> show master status;
+——————+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————+———-+————–+——————+——————-+
| mysql-bin.000005 | 1158 | | | |
+——————+———-+————–+——————+——————-+
- 在从库上停止slave
mysql> stop slave; - 导入备份的数据文件
mysql> source /data/bak.sql - 重置同步
mysql> reset slave; - 重新设置同步节点
host,port,user,password请根据你的主库设置相应修改,log_file和log_pos根据主库中master status相应修改。
|
- 开启slave
mysql> start slave; - 查看slave状态
mysql> show slave status\G;
显示如下信息则表示正常Slave_IO_Running: Yes
Slave_SQL_Running: Yes
- 对主数据库解锁
mysql> unlock tables;