MySQL8.0Linux安装及主从的搭建

MySQL8.0Linux安装教程

下载并安装

需要说明的一点是我使用的是SSH secure shell Client连接linux系统的,它的用法和命令窗口差不多。界面如图:一样的使用Linux命令操作。

话不多说
第一步:
1)、切换到 /usr/local下

cd /usr/local

2)、创建mysql文件夹

mkdir mysql8

3)、切换到mysql文件夹下

cd mysql8

4)、下载mysql8.0安装包

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz

如果执行没反应,可以复制安装包链接在Windows的浏览器下载好,再用SSH移到 /use/local/mysql文件夹下面(这个时候就提现出了SSH的便利性)

5)、解压mysql8.0安装包

tar xvJf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz 

6)、重命名解压出来的文件夹,这里改成mysql-8.0

mv mysql-8.0.20-linux-glibc2.12-x86_64 /usr/local/mysql8

7)、/use/local/mysql8文件夹下创建data文件夹 存储文件

mkdir data

8)、分别创建用户组以及用户和密码(如果提示已存在说明之前有创建过了)

groupadd mysql
useradd -g mysql mysql

9)、授权刚刚新建的用户

chown -R mysql.mysql /usr/local/mysql/mysql-8.0
chmod 750 /usr/local/mysql/data -R

10)、配置环境,编辑/etc/profile文件

vim /etc/profile

在最后一行加
export PATH=$PATH:/usr/local/mysql8/bin:/usr/local/mysql8/lib

11)、编辑my.cnf文件

vim /etc/my.cnf
按下面复制进去就好了,#号开头的不用管,一样,添加完之后,换行,打出“:sq”,用来保存文件并退出

[mysql]
default-character-set=utf8mb4
[client]
#port=3306
socket=/var/lib/mysql/mysql.sock

[mysqld]
#port=3306
#server-id=3306
user=mysql
general_log = 1
general_log_file= /var/log/mysql/mysql.log
socket=/var/lib/mysql/mysql.sock
basedir=/usr/local/mysql8
datadir=/usr/local/mysql8/data
log-bin=/usr/local/mysql8/data/mysql-bin
innodb_data_home_dir=/usr/local/mysql8/data
innodb_log_group_home_dir=/usr/local/mysql8/data/
character-set-server=utf8mb4
lower_case_table_names=1
autocommit=1
default_authentication_plugin=mysql_native_password
symbolic-links=0

[mysqld_safe]
log-error=/usr/local/mysql8/data/mysql.log
pid-file=/usr/local/mysql8/data/mysql.pid


12)、切换到/usr/local/mysql8/bin目录下

cd bin

13)、初始化基础信息,得到数据库的初始密码

./mysqld --user=mysql --basedir=/usr/local/mysql8 --datadir=/usr/local/mysql8/data/ --initialize

如图,复制出红框的初始密码,保存到本地,后面需要使用到。
ISSUE:如果因为路径等各种问题需要重新初始化的,需要清空上面创建的data文件,在data所在的目录下使用 rm -rf data 命令。

14)、复制 mysql.server 文件,在/usr/local/mysql8目录下执行

cp -a ./support-files/mysql.server /etc/init.d/mysql 
cp -a ./support-files/mysql.server /etc/init.d/mysqld

15)、赋予权限

chown 777 /etc/my.cnf
chmod +x /etc/init.d/mysql
chmod +x /etc/init.d/mysqld

16)、检查一下/var/lib/mysql是否存在,否则进行创建

mkdir /var/lib/mysql 

然后再赋予权限

chown -R mysql:mysql /var/lib/mysql/ 

17)、启动数据库,有SUCCESS字眼说明MySQL安装完成

service mysql start 

如果发现启动失败,可以先查看data里面的mysql.log,如果有提示3306这样的字样,第一个想到的应该是端口被占用,
使用lsof -i:端口号,查看是哪个PID(进程号)占用了该端口,然后使用kill PID(进程号)杀掉进程,重新执行service mysql start

修改密码,并设置远程连接

1)、修改数据库root账号的密码,并设置可以远程访问(因为root默认是不能远程访问的)

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'psh120370';

2)、执行flush privileges; 使密码生效

flush privileges;

3)、选择数据库

 use mysql;

4)再修改远程连接并生效

update user set host='%' where user='root';

5)执行提交命令,搞定!

flush privileges;
最后就可以使用root账号去登录mysql了

题外:
给mysql创建新的数据库用户并授予权限

1)创建用户(名称随意,这里的用户名称为mysql)并可以远程访问
CREATE user ‘mysql’@‘%’;
#修改密码
alter user ‘mysql’@‘%’ identified with mysql_native_password by ‘tcl.2021’;

2)创建新的数据库
#create database 数据库名 default character set utf8mb4 collate utf8mb4_unicode_ci;

3)把新的数据库授权给新用户
#将test库的所有权限赋予mysql用户
grant all privileges on test.* to “mysql”@“%”;
grant all privileges on test.* to “tcl”@“%”;

4)、刷新权限
flush privileges;

开机自启

添加为服务: chkconfig --add mysqld

查看服务列表: chkconfig --list

看到3、4、5状态为开或者为 on 则表示成功。如果是 关或者 off 则执行一下:chkconfig --level 345 mysqld on

在这里插入图片描述

重启计算机:reboot

MYSQL主从

前提:配置好两台mysql

确认mysql server 的uuid是否相同

-- 找到 auto.cnf 文件
find  / -iname "auto.cnf"

/usr/local/mysql8/data/auto.cnf

-- 如果相同需要修改
vim  /usr/local/mysql8/data/auto.cnf

或者直接删除,会重新生成

cd   /usr/local/mysql8/data/

cp auto.cnf  auto-back.cnf

rm -rf auto.cnf

1、主机配置文件

编辑my.cnf文件

vim /etc/my.cnf

具体参数配置如下:

  • 必选:
#[必须]主服务器唯一ID
server_id=1

#[必须]启用二进制日志,指名路径。比如:自己本地的路径/log/mysqlbin
log-bin=mysql-bin
  • 可选:
#[可选] 0(默认)表示读写(主机),1表示只读(从机)
read-only=0

#设置日志文件保留的时长,单位是秒
binlog_expire_logs_seconds=6000

#控制单个二进制日志大小。此参数的最大和默认值是1GB
max_binlog_size=200M

#[可选]设置不要复制的数据库
binlog-ignore-db=test

#[可选]设置需要复制的数据库,默认全部记录。比如:binlog-do-db=atguigu_master_slave
binlog-do-db=需要复制的主数据库名字

#[可选]设置binlog格式
binlog_format=STATEMENT

2、从机配置

编辑my.cnf文件

vim /etc/my.cnf
#[必须]从服务器唯一ID
server_id=2
server_id
#[可选]启用中继日志
relay-log=mysql-relay


3、主机:建立账户并授权

#在主机MySQL里执行授权主从复制的命令
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'从机器数据库IP' IDENTIFIED BY 'abc123';
#5.5,5.7

如果使用的是MySQL8,需要如下的方式建立账户,并授权slave:

CREATE USER 'slave1'@'%' IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%';

#此语句必须执行
ALTER USER 'slave1'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

flush privileges;

在这里插入图片描述

查询Master的状态,并记录下File和Position的值。

show master status;

在这里插入图片描述

mysql-bin.000070 1106

4、从机:配置需要复制的主机

从机上复制主机的命令

CHANGE MASTER TO
MASTER_HOST='主机的IP地址',
MASTER_USER='主机用户名',
MASTER_PASSWORD='主机用户名的密码',
MASTER_LOG_FILE='mysql-bin.具体数字',
MASTER_LOG_POS=具体值;

这里需要根据自己的服务器信息做修改

CHANGE MASTER TO MASTER_HOST='192.168.158.134',MASTER_USER='slave1',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000070',MASTER_LOG_POS=1106;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N4TE0hEA-1678278105443)(C:\Users\IsTrueLove\AppData\Roaming\Typora\typora-user-images\image-20230307222507545.png)]

启动slave同步

START SLAVE;

接着,查看同步状态:

SHOW SLAVE STATUS\G

如果下面两个参数都是yes,就配置成功了

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hiMrPDGO-1678278105443)(C:\Users\IsTrueLove\AppData\Roaming\Typora\typora-user-images\image-20230308201326660.png)]

如果出错,可能的原因有:

1. 网络不通
2. 账户密码错误
3. 防火墙
4. mysql配置文件问题
5. 连接服务器时语法
6. 主服务器mysql权限

关闭主从:

stop slave;

如果想要重新配置主从,就需要停止从服务器复制功能,再使用需要重新配置主从。否则会报错如下:

重新配置主从,需要在从机上执行:

stop slave;
reset master; #删除Master中所有的binglog文件,并将日志索引文件清空,重新开始所有新的日志文件(慎用)

<think>我们将在Rocky Linux 9.5上部署MySQL 8.0并配置MHA(Master High Availability)集群环境。MHA是一个用于MySQL高可用性的开源工具,可以在主节点故障时自动进行故障转移。 ### 步骤概览 1. 准备环境:至少三台Rocky Linux 9.5服务器(一主两从,或一主一从加一个管理节点)。 2. 安装MySQL 8.0并配置主从复制。 3. 配置SSH免密登录和MHA所需用户。 4. 安装MHA Manager和Node组件。 5. 配置MHA(包括Manager配置文件)。 6. 启动MHA并测试故障转移。 ### 详细步骤 #### 1. 环境准备 - 三台服务器(假设IP和主机名如下): - 主库:192.168.1.10, hostname: master - 从库1:192.168.1.11, hostname: slave1 - 从库2:192.168.1.12, hostname: slave2 - (可选)管理节点:192.168.1.13, hostname: manager(可以在其中一台从库上运行MHA Manager,但建议独立) - 确保所有服务器: - 防火墙允许相关端口(MySQL:3306, SSH:22)。 - 时间同步(使用NTP)。 - 主机名解析(/etc/hosts或DNS)。 #### 2. 安装MySQL 8.0 在所有服务器安装MySQL 8.0。 ```bash # 添加MySQL Yum仓库 sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm # 安装MySQL服务器 sudo dnf install -y mysql-community-server # 启动MySQL并设置开机自启 sudo systemctl enable mysqld --now # 获取临时密码 sudo grep 'temporary password' /var/log/mysqld.log # 运行安全脚本,设置root密码等 sudo mysql_secure_installation ``` #### 3. 配置主从复制 假设主库为master,从库为slave1和slave2。 **在主库上:** ```sql CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'repl_password'; -- MySQL 8默认使用caching_sha2_password,为了兼容性改为mysql_native_password FLUSH PRIVILEGES; # 修改配置文件/etc/my.cnf [mysqld] server-id=1 log-bin=mysql-bin binlog_format=row gtid_mode=ON enforce_gtid_consistency=ON ``` 重启MySQL:`sudo systemctl restart mysqld` **在从库上:** 修改配置文件/etc/my.cnf,设置不同的server-id(例如2和3),并同样启用GTID。 重启从库的MySQL。 **配置从库复制主库:** 在每个从库上执行: ```sql CHANGE MASTER TO MASTER_HOST='192.168.1.10', MASTER_USER='repl', MASTER_PASSWORD='repl_password', MASTER_AUTO_POSITION=1; START SLAVE; ``` 检查复制状态:`SHOW SLAVE STATUS\G`,确保Slave_IO_Running和Slave_SQL_Running都是Yes。 #### 4. 配置SSH免密登录和MHA用户 MHA Manager需要无密码SSH访问所有节点(包括主从)。在管理节点(或运行MHA Manager的节点)上: ```bash ssh-keygen -t rsa ssh-copy-id root@master ssh-copy-id root@slave1 ssh-copy-id root@slave2 ``` 测试:`ssh root@master` 等无需密码。 **在MySQL中创建MHA监控用户(所有节点)** 在主库上执行(会复制到从库): ```sql CREATE USER 'mha'@'%' IDENTIFIED BY 'mha_password'; GRANT ALL PRIVILEGES ON *.* TO 'mha'@'%'; ALTER USER 'mha'@'%' IDENTIFIED WITH mysql_native_password BY 'mha_password'; FLUSH PRIVILEGES; ``` #### 5. 安装MHA 在管理节点(manager)上安装MHA Manager,在所有节点(包括主从)上安装MHA Node。 **安装依赖:** ```bash sudo dnf install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes ``` **安装MHA Node(所有节点):** ```bash sudo dnf install -y https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.noarch.rpm ``` **安装MHA Manager(管理节点):** ```bash sudo dnf install -y https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.noarch.rpm ``` #### 6. 配置MHA 在管理节点创建配置文件目录:`sudo mkdir /etc/mha` 创建配置文件:`sudo vi /etc/mha/app1.cnf` ```ini [server default] manager_workdir=/var/log/mha/app1 manager_log=/var/log/mha/app1/manager.log ssh_user=root user=mha password=mha_password repl_user=repl repl_password=repl_password ping_interval=1 [server1] hostname=master port=3306 [server2] hostname=slave1 port=3306 candidate_master=1 [server3] hostname=slave2 port=3306 no_master=1 ``` #### 7. 启动MHA并测试 **检查SSH连接:** ```bash masterha_check_ssh --conf=/etc/mha/app1.cnf ``` **检查复制集群:** ```bash masterha_check_repl --conf=/etc/mha/app1.cnf ``` **启动MHA Manager:** ```bash nohup masterha_manager --conf=/etc/mha/app1.cnf > /var/log/mha/app1/manager.log 2>&1 & ``` **监控状态:** ```bash masterha_check_status --conf=/etc/mha/app1.cnf ``` **测试故障转移:** - 停止主库的MySQL:`sudo systemctl stop mysqld` - 观察MHA日志,看是否自动切换主库。 ### 注意事项 - MHA Manager需要持续运行(建议使用systemd服务管理)。 - 故障转移后,原主库需要重新加入集群作为新主库的从库。 - 确保定期备份和监控。 §§相关问题§§ 1. MHA故障转移后如何恢复原主库? 2. 如何配置MHA的邮件报警功能? 3. MHA与GTID复制结合使用需要注意什么? 4. 如何监控MHA的运行状态?</think>### 在Rocky Linux 9.5上部署MySQL 8.0并配置MHA集群 #### 一、环境准备 1. **服务器规划**(最小拓扑): - 主库节点:192.168.1.10 - 从库节点1:192.168.1.11(候选主库) - 从库节点2:192.168.1.12 - MHA管理节点:192.168.1.13(可部署在从库节点) ```bash # 所有节点修改主机名 sudo hostnamectl set-hostname master # 主节点 sudo hostnamectl set-hostname slave1 # 从节点1 ``` 2. **系统配置**: ```bash # 所有节点操作 sudo dnf update -y sudo systemctl disable firewalld --now # 或配置防火墙规则 sudo setenforce 0 # 临时关闭SELinux sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config ``` #### 二、安装MySQL 8.0 1. **添加MySQL Yum源**: ```bash sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm sudo dnf module disable -y mysql ``` 2. **安装MySQL**: ```bash sudo dnf install -y mysql-community-server sudo systemctl enable mysqld --now ``` 3. **初始化设置**: ```bash # 获取临时密码 sudo grep 'temporary password' /var/log/mysqld.log # 安全配置 sudo mysql_secure_installation ``` #### 三、配置主从复制 1. **主库配置**(192.168.1.10): ```ini # /etc/my.cnf [mysqld] server-id=1 log-bin=mysql-bin gtid_mode=ON enforce_gtid_consistency=ON binlog_format=ROW ``` ```sql CREATE USER 'repl'@'%' IDENTIFIED BY 'SecurePass123!'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; ``` 2. **从库配置**(192.168.1.11/192.168.1.12): ```ini # /etc/my.cnf [mysqld] server-id=2 # slave1用2, slave2用3 relay-log=relay-bin read_only=1 gtid_mode=ON enforce_gtid_consistency=ON ``` ```sql CHANGE MASTER TO MASTER_HOST='192.168.1.10', MASTER_USER='repl', MASTER_PASSWORD='SecurePass123!', MASTER_AUTO_POSITION=1; START SLAVE; ``` #### 四、配置MHA高可用 1. **所有节点安装依赖**: ```bash sudo dnf install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager ``` 2. **安装MHA Node**(所有节点): ```bash sudo dnf install -y https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.noarch.rpm ``` 3. **管理节点安装MHA Manager**: ```bash sudo dnf install -y https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.noarch.rpm ``` 4. **配置SSH免密登录**(管理节点操作): ```bash ssh-keygen -t rsa ssh-copy-id root@master ssh-copy-id root@slave1 ssh-copy-id root@slave2 ``` 5. **创建MHA配置文件**: ```bash sudo mkdir /etc/mha sudo vi /etc/mha/app1.cnf ``` ```ini [server default] manager_workdir=/var/log/mha/app1 manager_log=/var/log/mha/app1/manager.log ssh_user=root user=mha_user password=MhaSecurePass123! repl_user=repl repl_password=SecurePass123! ping_interval=3 [server1] hostname=master port=3306 [server2] hostname=slave1 port=3306 candidate_master=1 [server3] hostname=slave2 port=3306 no_master=1 ``` 6. **创建MHA管理用户**(所有MySQL节点): ```sql CREATE USER 'mha_user'@'%' IDENTIFIED BY 'MhaSecurePass123!'; GRANT ALL PRIVILEGES ON *.* TO 'mha_user'@'%'; ``` #### 五、启动与验证 1. **检查MHA环境**: ```bash masterha_check_ssh --conf=/etc/mha/app1.cnf masterha_check_repl --conf=/etc/mha/app1.cnf ``` 2. **启动MHA服务**: ```bash nohup masterha_manager --conf=/etc/mha/app1.cnf > /var/log/mha/manager.log 2>&1 & ``` 3. **验证MHA状态**: ```bash masterha_check_status --conf=/etc/mha/app1.cnf ``` 4. **故障转移测试**: ```bash # 停止主库MySQL sudo systemctl stop mysqld # 观察日志自动切换 tail -f /var/log/mha/manager.log ``` #### 六、关键注意事项 1. **GTID要求**:MySQL必须启用GTID复制,这是MHA故障转移的基础[^1]。 2. **SSH配置**:管理节点到所有数据库节点的SSH免密必须畅通。 3. **时间同步**:所有节点需使用NTP同步时间: ```bash sudo dnf install -y chrony sudo systemctl enable chronyd --now ``` 4. **故障恢复**:原主库恢复后需重新加入集群作为新从库。 > 部署完成后的集群架构满足关系:$$ \text{主库} \xrightarrow{\text{同步}} \text{从库} \xleftarrow{\text{监控}} \text{MHA Manager} $$
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值