mysql
*捣鼓了一个周末,完整的整理出了这个mysql5.7.29双主HA最清晰最详细最易读的部署方案。本人辛苦的原创,照着我这个文档部署,你肯定可以完美部署。*
环境
192.168.126.34 | lsyk04 | Mysql 5.7.29,keepalived 1.3.5 |
---|---|---|
192.168.126.35 | lsyk05 | Mysql 5.7.29,keepalived 1.3.5 |
192.168.126.88 | vip |
安装mysql
-
解压 root执行
tar -xvf mysql-5.7.29-el7-x86_64.tar tar -zxvf mysql-5.7.29-el7-x86_64.tar.gz -C /opt/ mv /opt/mysql-5.7.29-el7-x86_64 /opt/mysql-5.7.29
-
配置单机mysql
# 创建mysql用户组和用户并修改权限 groupadd mysql useradd -r -g mysql mysql passwd mysql # 密码为:fa # 创建数据文件目录 mkdir -p /data/mysql mkdir -p /opt/mysql-5.7.29/logs # 配置配置文件: vi /etc/my.cnf # 修改配置如下 [mysqld] basedir=/opt/mysql-5.7.29/ datadir=/data/mysql port=3306 character-set-server=utf8mb4 log_error=/opt/mysql-5.7.29/logs/error.log # 变更所属 chown -R mysql:mysql /opt/mysql-5.7.29/ chown -R mysql:mysql /data/mysql chown mysql:mysql /etc/my.cnf # 配置环境变量 vi /etc/profile # 里添加如下环境变量 export MYSQL_HOME=/opt/mysql-5.7.29 export PATH=$PATH:$MYSQL_HOME/bin:$MYSQL_HOME/support-files
-
生成临时密码 root执行
/opt/mysql-5.7.29/bin/mysqld --initialize --user=mysql # 获取密码 vi /opt/mysql-5.7.29/logs/error.log # 查找 2020-09-16T15:49:40.983087Z 1 [Note] A temporary password is generated for root@localhost: (hLlo!qCL7Of
-
启动mysql服务并修改密码: root用户启动
/opt/mysql-5.7.29/support-files/mysql.server start # 登录,输入上述找到的临时密码 mysql -uroot -p # 更改密码 mysql> SET PASSWORD = PASSWORD('fa'); # 赋权限 接着上面执行: #(执行下面的语句 .:所有库下的所有表 %:任何IP地址或主机都可以连接) mysql> GRANT ALL PRIVILEGES ON \. TO 'root'@'%' IDENTIFIED BY 'fa' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES; #关闭mysql服务: root用户 /opt/mysql-5.7.29/support-files/mysql.server stop
配置双主互备
-
配置文件/etc/my.cnf
# lsyk04配置/etc/my.cnf: [mysqld] basedir=/opt/mysql-5.7.29/ datadir=/data/mysql port=3306 character-set-server=utf8mb4 log_error=/opt/mysql-5.7.29/logs/error.log # 开启mysql binlog功能 log-bin=mysql-bin # binlog记录内容的方式 binlog_format=mixed # 服务的唯一编号(另一个写2) server-id=1 # 字符集编码 character-set-server=utf8 # 自增长字段从哪个数开始(另一个写2) auto_increment_offset=1 # 自增长字段每次递增的量 auto_increment_increment=2 # 以下参数根据需要来设置 # logs-slave-updates # expire_logs_days = 10 默认为0 # max_binlog_size = 100M 默认1G # sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES # log_bin_trust_function_creators=0 默认为0 [client] # 字符集编码 default-character-set=utf8 # 配置完成后,重启: /opt/mysql-5.7.29/support-files/mysql.server stop /opt/mysql-5.7.29/support-files/mysql.server start # lsyk05配置/etc/my.cnf:参考lsyk04,注意更改 auto_increment_offset 和 server-id #配置完成后,重启: /opt/mysql-5.7.29/support-files/mysql.server stop /opt/mysql-5.7.29/support-files/mysql.server start
-
lsyk04做主,lsyk05做从配置
lsyk04节点用root用户登录mysql,创建同步用户:
-- 自动创建同步用户 mysql> grant replication slave,replication client on . to 'sync'@'%' identified by 'fa'; -- 查看lsyk04节点的master当前状态 mysql> show master status;
lsyk05节点用root用户登录mysql,根据上述查到的主节点状态执行:
mysql> change master to master_host='192.168.126.34',master_user='sync',master_password='fa',master_log_file='mysql-bin.000001',master_log_pos=462; mysql> start slave; -- 查看从节点的当前状态: mysql> show slave status\G
得到如下所示则表示配置成功:
-
lsyk05做主,lsyk04做从配置:
lsyk05节点用root用户登录mysql
-- 自动创建同步用户: mysql> grant replication slave,replication client on *.* to 'sync'@'%' identified by 'fa'; -- 查看lsyk05节点的master当前状态: mysql> show master status;
lsyk04节点用root用户登录mysql,根据上述查到的主节点状态执行:
mysql> change master to master_host='192.168.126.35',master_user='sync',master_password='fa',master_log_file='mysql-bin.000001',master_log_pos=462; mysql> start slave; -- 查看从节点的当前状态: mysql> show slave status\G
-
双主测试:
在其中任何节点的ddl,dml,在另一台都能同步,包括创建库、表、增删改操作等
-
双主模式,关掉一个节点,另一个节点的slave状态就成了connecting:
启动后,slave 状态又变成正常了:Yes。
-
一台节点挂掉后,另一台做的变更,包括增删改数据和删除表甚至包括用户、权限的管理
等的操作,待这台节点重新启动后,也会同步过来,当然是日志没有删除的情况下。
配置keepalive及故障恢复
请见本人的博客 https://blog.csdn.net/qq_41187116/article/details/125942355?spm=1001.2014.3001.5501
*非常完美的结束!!!*