centos7下mysql8 主从安装配置
centos7 版本下载
镜像版本要求centos7的小版本;下载地址建议从阿里云镜像站下载地址
目前官方镜像分为如下类型:
- CentOS-7-x86_64-DVD-2009.iso 标准安装版,一bai般下载这个就可以了。
- CentOS-7-x86_64-NetInstall-2009.iso 网络安装镜像du。
- CentOS-7-x86_64-Everything-2009.iso 对完整版安装盘的软件进行补充集成所有软
- CentOS-7-x86_64-Minimal-2009.iso 精简版本,包含核心组件。
这边我使用CentOS-7-x86_64-DVD-2009.iso 安装centos7操作系统
mysql 8.0.20下载
mysql版本要求 mysql8.0.20;下载地址建议从官方镜像站下载地址:mysql8.0.20。
mysql8.0.20 二进制安装
总体安装步骤概述如下:
- 操作系统等相关配置设置
- 安装依赖包
- 创建用户
- 修改配置文件、创建相关数据目录、日志目录等并授权
- 运行安装命令,启动数据库
- 配置环境变量、服务等(看需要)
操作系统配置和设置
查看CPU、内存、SSL版本、硬盘大小、关闭防火墙和selinux
查看物理CPU个数
1 | sh复制代码[root@localhost ~]# cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l |
查看逻辑CPU的个数
1 | sh复制代码[root@localhost ~]# cat /proc/cpuinfo| grep "processor"| wc -l |
查看CPU信息(型号)
1 | sh复制代码[root@localhost ~]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c |
查看内存:
1 | sh复制代码[root@localhost ~]# cat /proc/meminfo |
查看ssl版本
1 | sh复制代码[root@localhost ~]# openssl version |
查看硬盘大小 尽量将/根目录占用所有磁盘目录的80% ;home目录50-100g即可
1 | sh复制代码[root@localhost ~]# df -lh |
关闭防火墙
1 | sh复制代码systemctl stop firewalld.service |
修改selinux,将SELINUX=enforcing 改为SELINUX=disabled
1 | sh复制代码[root@localhost ~]# vi /etc/selinux/config |
1 | sh复制代码# 不重启机器生效 |
修改文件限制等
1 | sh复制代码[root@localhost ~]# vi /etc/security/limits.conf |
1 | sh复制代码[root@localhost ~]# vi /etc/sysctl.conf |
安装mysql组件包
1 | arduino复制代码yum install -y epel-release wget |
创建用户和用户文件夹
1 | 复制代码groupadd mysql |
将下载好的安装包上传到服务器执行目录,也可以直接用wget下载软件包
1 | url复制代码https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz**](https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz |
1 | sh复制代码# 解压 |
修改配置文件
1 | yml复制代码[mysqld] |
安装和启动数据库
指定本实例的配置文件进行安装
建议写全路径运行命令进行安装
1 | sh复制代码/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql |
查看日志
1 | bash复制代码vi /data/mysql/logs/mysqld.log |
此时可以看到临时密码,并查看是否有错误产生:A temporary password is generated for root@localhost: 密码
1 | ini复制代码[root@localhost ~]# vi /data/mysql/logs/mysqld.log |
启动数据库
- 方法1:以服务模式启动数据库 建议用此方式启动。
1 | sh复制代码cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld |
- 启动数据库,并在后台运行(执行下面命令时多次回车,专为小白而备注)
1 | bash复制代码/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf & |
查看数据库进程
1 | sh复制代码[root@localhost ~]# ps -ef | grep mysql |
修改mysql默认密码
登录数据库修改root密码。安装按成必须修改随机root密码,不然无法操作其他内容
1 | sh复制代码[root@localhost ~]#/usr/local/mysql/bin/mysql -u root -p '初始生成密码' -S /tmp/mysql.sock |
mysql8主从配置
- 将上面安装好mysql的虚拟复制1台(注意修改ip)
- 修改master和slave my.cnf文件
1 | sh复制代码#建议和服务器ip保持一致,防止重复 |
- 重命名auto.cnf文件(auto.cnf默认在mysql的data目录下)
1 | sh复制代码mv /data/mysql/data/auto.cnf /data/mysql/data/auto.cnf_bak |
- 重启master服务
1 | sh复制代码service mysqld restart |
- 为从节点创建一个登陆用户 repl
1 | sh复制代码[root@localhost ~]# mysql -u root -p |
这里注意‘repl’@’%’中 % 不要写ip
- 查看master节点状态
1 | sql复制代码[root@localhost ~]# mysql -u root -p |
这里要注意 File 和 Position 后面要用。
- 登陆slave服务,配置主节点信息
1 | sh复制代码[root@localhost ~]# mysql -u root -p |
注意:
1 | makefile复制代码CHANGE MASTER TO |
- 检查slave节点状态
1 | sql复制代码mysql> show slave status\G; |
Slave_IO_State: Waiting for master to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
看到这些说明我们配置成功了,接下来可以使用nacicat等连接工具测试一下。
记录
- mysql查看当前用户列表
1 | sql复制代码SELECT User, Host FROM mysql.user; |
常见问题
- Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
这个错误提示。即主从架构中使用了相同的UUID。首先排查server_id系统变量,是否相同:
1 | sql复制代码mysql> show variables like 'server_id'; |
1 | sql复制代码mysql> show variables like 'server_id'; |
发现我们已经改为两个不同的了,查看auto.cnf文件(找不到可以使用find / -name auto.cnf查找)
1 | sh复制代码[root@localhost logs]# vim /data/mysql/data/auto.cnf |
1 | sh复制代码[root@localhost logs]# vim /data/mysql/data/auto.cnf |
可以看出两个计器上的server-uuid出现了重复,原因是克隆了虚拟机,只改server_id不行。
解决:重命名master auto.cnf文件后重启mysql
1 | sh复制代码[root@localhost ~]# mv /data/mysql/data/auto.cnf /data/mysql/data/auto.cnf.bak |
重启后可以看出server-uuid已经重新生成了。
- 主从同步报错 Got fatal error 1236 from master when reading data from binary log: ‘Could not find first log…
这个是因为binlog位置索引处的问题,解决方法:
1 | ini复制代码1.打开主服务器,进入mysql |
本文转载自: 掘金