MySQL 学习笔记(第七期):高可用架构进阶与综合项目实战

MySQL 学习笔记(第七期):高可用架构进阶与综合项目实战

本笔记整合 主从复制与读写分离 和 MHA 高可用与综合项目 ,涵盖:主从复制原理与搭建、Amoeba 读写分离、MHA 高可用架构(故障切换与修复)、LAMP+WordPress 项目部署、MySQL 5.7 源码安装。这是一份完整的高可用与实战指南。


第一部分:主从复制与读写分离

一、主从复制核心原理

1.1 为什么需要主从复制?
  • 数据冗余与灾难恢复
  • 提升读并发能力(读写分离)
  • 避免读操作锁冲突
  • 数据备份(从库可离线备份)
1.2 主从复制的三个核心组件
组件 位置 作用
binlog(二进制日志) 主库 记录所有数据变更操作
I/O 线程 从库 连接主库,请求并接收 binlog,写入中继日志
SQL 线程 从库 读取中继日志,重放 SQL 语句
1.3 完整复制流程
  1. 主库执行 INSERT/UPDATE/DELETE 等操作
  2. 主库将这些操作记录到 binlog
  3. 从库的 I/O 线程连接主库,请求 binlog
  4. 主库的 dump 线程将 binlog 发送给从库
  5. 从库 I/O 线程将接收到的内容写入中继日志(relay log)
  6. 从库 SQL 线程读取中继日志,重放 SQL 语句
  7. 从库数据与主库完全一致

状态检查 :在从库执行 SHOW SLAVE STATUS\G,关键字段:

  • Slave_IO_Running: Yes ------ I/O 线程正常
  • Slave_SQL_Running: Yes ------ SQL 线程正常

二、一主两从环境搭建

2.1 环境规划
主机名 IP 地址 角色 说明
mysql-master 192.168.108.101 主库 可写可读
mysql-slave01 192.168.108.102 从库1 只读
mysql-slave02 192.168.108.103 从库2 只读

所有节点需完成:

  • 时间同步:ntpdate ntp.aliyun.com
  • 关闭防火墙:systemctl disable --now firewalld
  • 关闭 SELinux:setenforce 0
2.2 主库配置(mysql-master)

编辑配置文件 /etc/my.cnf

ini

复制代码
[mysqld]
server-id = 11
log-bin = master-bin
log-slave-updates = true

重启 MySQL

bash

复制代码
systemctl restart mysqld

创建复制用户

sql

复制代码
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.108.%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

查看主库状态(记录 File 和 Position):

sql

复制代码
SHOW MASTER STATUS;
+---------------------+----------+--------------+------------------+
| File                | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------+----------+--------------+------------------+
| master-bin.000001   | 604      |              |                  |
+---------------------+----------+--------------+------------------+
2.3 从库配置(mysql-slave01 / mysql-slave02)

处理 UUID 冲突(如果从库是从主库克隆而来):

bash

复制代码
systemctl stop mysqld
rm -f /usr/local/mysql/data/auto.cnf
systemctl start mysqld

编辑配置文件 /etc/my.cnf

ini

复制代码
[mysqld]
server-id = 22        # slave02 为 23
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index

重启 MySQL。

配置主从连接

sql

复制代码
CHANGE MASTER TO
    MASTER_HOST='192.168.108.101',
    MASTER_USER='myslave',
    MASTER_PASSWORD='123456',
    MASTER_LOG_FILE='master-bin.000001',
    MASTER_LOG_POS=604;

START SLAVE;

验证从库状态

sql

复制代码
SHOW SLAVE STATUS\G

确保 Slave_IO_Running: YesSlave_SQL_Running: Yes

2.4 验证主从同步

在主库创建测试数据

sql

复制代码
CREATE DATABASE school;
USE school;
CREATE TABLE student (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20) NOT NULL,
    age TINYINT UNSIGNED,
    gender ENUM('M','F') DEFAULT 'M'
);
INSERT INTO student (name, age) VALUES ('路飞', 20);

在从库查询

sql

复制代码
USE school;
SELECT * FROM student;
+----+--------+------+--------+
| id | name   | age  | gender |
+----+--------+------+--------+
| 10 | 路飞   | 20   | M      |
+----+--------+------+--------+

同步成功。


三、读写分离(Amoeba)

3.1 读写分离核心原理
  • 写操作(INSERT/UPDATE/DELETE) → 主库
  • 读操作(SELECT) → 从库(多个从库可负载均衡)

Amoeba 是一款基于 Java 的 MySQL 代理中间件,对应用透明,自动识别 SQL 类型并路由。

架构流程

text

复制代码
应用程序 → Amoeba (端口 8066) → 判断 SQL 类型
    ├── 写操作 → 主库池 (writePool)
    └── 读操作 → 从库池 (readPool) → 轮询/权重负载均衡
3.2 Amoeba 环境准备

节点规划

主机名 IP 软件
amoeba 192.168.108.110 Amoeba + JDK 1.6
mysql-client 192.168.108.111 MySQL 客户端(测试用)

安装 JDK 1.6

bash

复制代码
chmod +x jdk-6u14-linux-x64.bin
./jdk-6u14-linux-x64.bin   # 按提示输入 yes
mv jdk1.6.0_14 /usr/local/jdk1.6

配置环境变量/etc/profile):

bash

复制代码
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin

bash

复制代码
source /etc/profile

安装 Amoeba

bash

复制代码
mkdir /usr/local/amoeba
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/

测试安装:

bash

复制代码
/usr/local/amoeba/bin/amoeba
# 显示 start|stop 说明成功
3.3 后端 MySQL 授权

在三台 MySQL 节点上,创建 Amoeba 访问账号:

sql

复制代码
GRANT ALL ON *.* TO 'test'@'192.168.108.%' IDENTIFIED BY '123.com';
3.4 配置 Amoeba
配置文件位置
  • conf/amoeba.xml ------ 代理核心配置(端口、认证、路由规则)
  • conf/dbServers.xml ------ 后端 MySQL 节点定义
配置 amoeba.xml

xml

复制代码
<!-- 30行附近:客户端连接 Amoeba 的账号密码 -->
<property name="user">amoeba</property>
<property name="password">123456</property>

<!-- 115-120行:读写池配置 -->
<property name="defaultPool">master</property>
<property name="writePool">master</property>
<property name="readPool">slaves</property>
配置 dbServers.xml

修改连接信息(23-30行)

xml

复制代码
<!-- 注意:MySQL 5.7 默认无 test 库,需改为 mysql -->
<property name="schema">mysql</property>
<property name="user">test</property>
<property name="password">123.com</property>

定义后端服务器(45-60行)

xml

复制代码
<dbServer name="master" parent="abstractServer">
    <factoryConfig>
        <property name="ipAddress">192.168.108.101</property>
    </factoryConfig>
</dbServer>

<dbServer name="slave1" parent="abstractServer">
    <factoryConfig>
        <property name="ipAddress">192.168.108.102</property>
    </factoryConfig>
</dbServer>

<dbServer name="slave2" parent="abstractServer">
    <factoryConfig>
        <property name="ipAddress">192.168.108.103</property>
    </factoryConfig>
</dbServer>

定义从库池(负载均衡)

xml

复制代码
<dbServer name="slaves" virtual="true">
    <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
        <property name="loadbalance">1</property>  <!-- 1=轮询 -->
        <property name="poolNames">slave1,slave2</property>
    </poolConfig>
</dbServer>
3.5 启动 Amoeba

bash

复制代码
/usr/local/amoeba/bin/amoeba start &

检查监听端口:

bash

复制代码
netstat -anpt | grep java
# 8066 端口应处于 LISTEN 状态
3.6 验证读写分离
测试客户端连接

bash

复制代码
# 安装 mysql 客户端
yum install -y mysql

# 连接 Amoeba(端口 8066)
mysql -u amoeba -p123456 -h 192.168.108.110 -P 8066
数据同步测试
  1. 在主库写入数据

    sql

    复制代码
    INSERT INTO student (name, age) VALUES ('鸣人', 20);
  2. 在客户端通过 Amoeba 读取,会发现数据已同步。

读写分离验证(轮询效果)

在从库 slave01slave02 上分别停止 SQL 线程,手动插入不同数据:

sql

复制代码
-- slave01
STOP SLAVE;
INSERT INTO student (name, age) VALUES ('卡卡西', 31);

-- slave02
STOP SLAVE;
INSERT INTO student (name, age) VALUES ('卡卡西', 32);

然后在客户端通过 Amoeba 多次执行 SELECT * FROM student,会发现结果在 31 和 32 之间交替出现,证明读请求被轮询分发到两个从库。

注意:停止从库复制仅用于验证读写分离,实际生产中从库应保持与主库同步。


第二部分:MHA 高可用架构

四、MHA 概述

MHA(Master High Availability) 是专为 MySQL 主从复制设计的高可用工具,解决主库单点故障问题,实现自动故障转移(0--30 秒),兼顾数据一致性。

4.1 MHA 核心概念
  • 组成:MHA Manager(管理节点)+ MHA Node(数据节点)
  • 目标:自动故障切换,数据不丢,对业务透明
  • 场景:自动故障转移(Failover)和主从切换(Switchover)
4.2 MHA 工作流程
  1. Manager 定期检测主库健康状态
  2. 检测到主库宕机后,自动选择数据最接近的新主库(候选主库)
  3. 尝试从宕机主库保存二进制日志
  4. 将差异的中继日志应用到新主库
  5. 重新配置其他从库指向新主库
  6. 完成 VIP 漂移(可选)

五、MHA 环境搭建

5.1 环境规划
主机名 IP 地址 角色 说明
mysql-master 192.168.108.131 主库 安装 node 组件
mysql-slave01 192.168.108.132 从库1(候选主库) 安装 node 组件
mysql-slave02 192.168.108.133 从库2 安装 node 组件
mha 192.168.108.130 MHA Manager 安装 node + manager 组件

注意:操作系统为 CentOS 7,MHA 版本 0.57。

5.2 处理 UUID 冲突(克隆节点)

bash

复制代码
# 在三台 MySQL 节点上分别执行
systemctl stop mysqld
rm -f /usr/local/mysql/data/auto.cnf
systemctl start mysqld
5.3 配置主从复制(一主两从)

主库配置/etc/my.cnf):

ini

复制代码
[mysqld]
server-id = 1
log_bin = master-bin
log-slave-updates = true

从库配置(slave01 和 slave02):

ini

复制代码
[mysqld]
server-id = 2   # slave02 为 3
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index

建立主从(从库上执行):

sql

复制代码
CHANGE MASTER TO
    MASTER_HOST='192.168.108.131',
    MASTER_USER='myslave',
    MASTER_PASSWORD='123',
    MASTER_LOG_FILE='master-bin.000001',
    MASTER_LOG_POS=1897;   -- 根据主库 SHOW MASTER STATUS 实际值

START SLAVE;

设置从库只读

sql

复制代码
SET GLOBAL read_only = 1;
5.4 安装 MHA 软件
所有节点安装依赖

bash

复制代码
yum install epel-release --nogpgcheck -y
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch \
    perl-Parallel-ForkManager perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN
所有节点安装 MHA Node

bash

复制代码
tar zxvf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
perl Makefile.PL
make && make install
Manager 节点安装 MHA Manager(需先装 Node)

bash

复制代码
tar zxvf mha4mysql-manager-0.57.tar.gz
cd mha4mysql-manager-0.57
perl Makefile.PL
make && make install

安装后 /usr/local/bin 下生成的主要工具:

工具 作用
masterha_check_ssh 检查 SSH 配置
masterha_check_repl 检查 MySQL 复制状况
masterha_manager 启动 Manager
masterha_check_status 检查运行状态
masterha_master_switch 手动切换
masterha_stop 关闭 Manager
5.5 配置无密码 SSH 认证

在 Manager 节点配置到所有 MySQL 节点的免密登录

bash

复制代码
ssh-keygen -t rsa
ssh-copy-id 192.168.108.131
ssh-copy-id 192.168.108.132
ssh-copy-id 192.168.108.133

在 MySQL 节点之间也配置免密(用于中继日志获取)

bash

复制代码
# mysql-master
ssh-keygen -t rsa
ssh-copy-id 192.168.108.132
ssh-copy-id 192.168.108.133

# mysql-slave01
ssh-keygen -t rsa
ssh-copy-id 192.168.108.131
ssh-copy-id 192.168.108.133

# mysql-slave02
ssh-keygen -t rsa
ssh-copy-id 192.168.108.131
ssh-copy-id 192.168.108.132
5.6 配置 MHA
复制故障切换脚本

bash

复制代码
cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin/

编辑 /usr/local/bin/master_ip_failover,修改以下变量(删除原有内容,替换为下方):

perl

复制代码
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';

use Getopt::Long;

my ($command, $ssh_user, $orig_master_host, $orig_master_ip, $orig_master_port,
    $new_master_host, $new_master_ip, $new_master_port);

my $vip = '192.168.108.200';          # 虚拟 IP
my $brdc = '192.168.108.255';         # 广播地址
my $ifdev = 'ens33';                  # 网卡接口
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";
my $exit_code = 0;

GetOptions(
    'command=s'          => \$command,
    'ssh_user=s'         => \$ssh_user,
    'orig_master_host=s' => \$orig_master_host,
    'orig_master_ip=s'   => \$orig_master_ip,
    'orig_master_port=i' => \$orig_master_port,
    'new_master_host=s'  => \$new_master_host,
    'new_master_ip=s'    => \$new_master_ip,
    'new_master_port=i'  => \$new_master_port,
);

exit &main();

sub main {
    if ($command eq "stop" || $command eq "stopssh") {
        my $exit_code = 1;
        eval {
            print "Disabling the VIP on old master: $orig_master_host \n";
            &stop_vip();
            $exit_code = 0;
        };
        if ($@) { warn "Got Error: $@\n"; exit $exit_code; }
        exit $exit_code;
    }
    elsif ($command eq "start") {
        my $exit_code = 10;
        eval {
            print "Enabling the VIP - $vip on the new master - $new_master_host \n";
            &start_vip();
            $exit_code = 0;
        };
        if ($@) { warn $@; exit $exit_code; }
        exit $exit_code;
    }
    elsif ($command eq "status") {
        print "Checking the Status of the script.. OK \n";
        exit 0;
    }
    else {
        &usage();
        exit 1;
    }
}

sub start_vip() {
    `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}

sub stop_vip() {
    `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}

sub usage {
    print "Usage: master_ip_failover --command=start|stop|stopssh|status ...\n";
}
创建 MHA 配置文件

bash

复制代码
mkdir /etc/masterha
cp /root/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha/

编辑 /etc/masterha/app1.cnf,替换为以下内容:

ini

复制代码
[server default]
manager_log=/var/log/masterha/app1_manager_log
manager_workdir=/var/log/masterha/app1
master_binlog_dir=/usr/local/mysql/data
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
password=manager
ping_interval=1
remote_workdir=/tmp
repl_password=123
repl_user=myslave
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.108.132 -s 192.168.108.133
ssh_user=root
user=mha

[server1]
hostname=192.168.108.131
port=3306

[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.108.132
port=3306

[server3]
hostname=192.168.108.133
port=3306

参数说明

  • candidate_master=1:将该从库设为候选主库,故障时优先提升
  • check_repl_delay=0:忽略复制延迟,确保候选主库总是被选中(即使有延迟)
  • secondary_check_script:二次检查脚本,防止误切换
5.7 验证配置

检查 SSH 免密

bash

复制代码
masterha_check_ssh --conf=/etc/masterha/app1.cnf

检查主从复制状态

bash

复制代码
masterha_check_repl --conf=/etc/masterha/app1.cnf
5.8 启动 MHA Manager

bash

复制代码
nohup masterha_manager --conf=/etc/masterha/app1.cnf \
    --remove_dead_master_conf \
    --ignore_last_failover \
    </dev/null > /var/log/masterha/app1/manager.log 2>&1 &

参数说明

  • --remove_dead_master_conf:切换后自动移除宕机主库的配置
  • --ignore_last_failover:忽略上次切换记录,允许立即再次切换(测试用)

查看运行状态

bash

复制代码
masterha_check_status --conf=/etc/masterha/app1.cnf
5.9 手动绑定 VIP(首次需在主库执行)

bash

复制代码
/sbin/ifconfig ens33:1 192.168.108.200/24

六、故障模拟与自动切换

6.1 模拟主库宕机

mysql-master 节点上:

bash

复制代码
systemctl stop mysql
# 或 kill -9 mysqld 进程模拟崩溃
6.2 观察 MHA 切换日志

在 MHA Manager 节点:

bash

复制代码
tail -f /var/log/masterha/app1/manager.log

日志会显示:

  • 检测到主库无响应
  • 执行二次检查
  • 选择新主库(此处为 slave01,因设置了 candidate_master=1
  • 保存原主库的 binlog
  • 应用差异日志到新主库
  • 将 VIP 漂移到新主库
  • 重新配置其他从库指向新主库
6.3 验证切换结果

新主库(原 slave01)上

bash

复制代码
ifconfig | grep 192.168.108.200   # VIP 已漂移
mysql -e "SHOW SLAVE STATUS\G"     # 已不再是从库

新从库(原 slave02)上

sql

复制代码
SHOW SLAVE STATUS\G
-- Master_Host 应变为 192.168.108.132(新主库)

配置文件变化/etc/masterha/app1.cnf 中的 [server1] 段已被自动删除。


七、故障修复与恢复

7.1 修复原主库

bash

复制代码
systemctl start mysql
7.2 将原主库作为新主库的从库加入

查看新主库的 binlog 位置

sql

复制代码
SHOW MASTER STATUS;
+---------------------+----------+--------------+------------------+
| File                | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------+----------+--------------+------------------+
| master-bin.000002   | 2210     |              |                  |
+---------------------+----------+--------------+------------------+

在原主库上执行

sql

复制代码
CHANGE MASTER TO
    MASTER_HOST='192.168.108.132',
    MASTER_USER='myslave',
    MASTER_PASSWORD='123',
    MASTER_LOG_FILE='master-bin.000002',
    MASTER_LOG_POS=2210;

START SLAVE;
7.3 恢复 MHA 配置文件

手动编辑 /etc/masterha/app1.cnf,重新添加原主库的 [server1] 段(可按需调整顺序)。

7.4 重启 MHA Manager

bash

复制代码
masterha_stop --conf=/etc/masterha/app1.cnf
nohup masterha_manager ... &  # 重新启动

第三部分:LAMP + WordPress 项目实战

八、LAMP 架构说明

LAMP 是一组常用于运行动态网站的软件首字母缩写:

  • L:Linux 操作系统
  • A:Apache(Web 服务器)
  • M:MySQL(数据库)
  • P:PHP(服务器端脚本语言)

九、WordPress 博客项目部署

9.1 环境规划
主机名 IP 地址 作用 软件
web 192.168.108.100 Web 服务器 + PHP 解析 Apache, PHP
mysql 192.168.108.101 数据库服务器 MySQL
9.2 安装 Apache 和 PHP

在 web 节点

bash

复制代码
yum -y install httpd php php-mysqlnd php-json php-gd php-xml php-mbstring php-zip

# 查看 PHP 版本
php -v
# PHP 7.2.24

# 关闭防火墙
systemctl disable --now firewalld

# 启动 Apache
systemctl start httpd

浏览器访问 http://192.168.108.100,看到 Apache 测试页即成功。

9.3 下载并配置 WordPress

bash

复制代码
cd /var/www/html/
wget https://cn.wordpress.org/latest-zh_CN.zip
unzip latest-zh_CN.zip
chown -R apache.apache wordpress/
9.4 配置数据库(mysql 节点)

sql

复制代码
CREATE DATABASE wordpress;
CREATE USER 'wordpresser'@'192.168.108.%' IDENTIFIED BY '123456';
GRANT ALL ON wordpress.* TO 'wordpresser'@'192.168.108.%';
FLUSH PRIVILEGES;
9.5 配置虚拟主机(web 节点)

bash

复制代码
vim /etc/httpd/conf.d/blog.ggd.cloud.conf

apache

复制代码
<VirtualHost *:80>
    ServerName blog.ggd.cloud
    DocumentRoot "/var/www/html/wordpress"
    <Directory "/var/www/html/wordpress">
        AllowOverride all
        Require all granted
    </Directory>
</VirtualHost>

重启 Apache:

bash

复制代码
systemctl restart httpd
9.6 客户端解析(在物理机或测试机)

编辑 C:\Windows\System32\drivers\etc\hosts,添加:

text

复制代码
192.168.108.100 blog.ggd.cloud
9.7 浏览器安装 WordPress

访问 http://blog.ggd.cloud,按提示填写数据库连接信息:

  • 数据库名:wordpress
  • 用户名:wordpresser
  • 密码:123456
  • 数据库主机:192.168.108.101(mysql 节点 IP)
  • 表前缀:wp_(默认)

后续填写站点标题、管理员账号即可完成安装。


第四部分:MySQL 5.7 源码安装(扩展)

十、源码编译安装 MySQL 5.7

适用于 CentOS 7 环境,需要手动编译,适合定制化需求。

10.1 环境准备

bash

复制代码
hostnamectl set-hostname mysql01
systemctl disable firewalld --now
setenforce 0
10.2 安装依赖

bash

复制代码
yum -y install ncurses ncurses-devel bison cmake gcc gcc-c++
10.3 创建运行用户

bash

复制代码
useradd -s /sbin/nologin mysql
10.4 解压源码与 boost 库

bash

复制代码
tar zxvf mysql-5.7.17.tar.gz -C /opt/
tar zxvf boost_1_59_0.tar.gz -C /usr/local/
mv /usr/local/boost_1_59_0 /usr/local/boost
10.5 CMake 配置

bash

复制代码
cd /opt/mysql-5.7.17/
cmake \
    -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
    -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
    -DSYSCONFDIR=/etc \
    -DSYSTEMD_PID_DIR=/usr/local/mysql \
    -DDEFAULT_CHARSET=utf8 \
    -DDEFAULT_COLLATION=utf8_general_ci \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
    -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
    -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
    -DMYSQL_DATADIR=/usr/local/mysql/data \
    -DWITH_BOOST=/usr/local/boost \
    -DWITH_SYSTEMD=1

注意 :如果 cmake 出错,删除源码目录中的 CMakeCache.txt 后重新执行。

10.6 编译与安装

bash

复制代码
make && make install
10.7 配置权限与文件

bash

复制代码
chown -R mysql.mysql /usr/local/mysql/

编辑 /etc/my.cnf

ini

复制代码
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

bash

复制代码
chown mysql:mysql /etc/my.cnf
10.8 配置环境变量

bash

复制代码
echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
echo 'export PATH' >> /etc/profile
source /etc/profile
10.9 初始化数据库

bash

复制代码
cd /usr/local/mysql/
bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
10.10 配置 systemd 服务

bash

复制代码
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld
10.11 设置 root 密码

bash

复制代码
mysqladmin -uroot password "huawei"
10.12 授权远程登录

sql

复制代码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'huawei' WITH GRANT OPTION;
FLUSH PRIVILEGES;

第五部分:总结与知识点一览表

十一、核心知识点汇总

类别 技术点 关键命令/配置
主从复制 binlog, I/O 线程, SQL 线程 CHANGE MASTER TO, START SLAVE
状态检查 SHOW SLAVE STATUS\G
读写分离 Amoeba 代理 监听 8066,路由 SQL
后端池配置 writePool, readPool, loadbalance=1
MHA 高可用 Manager + Node masterha_manager
故障切换脚本 master_ip_failover(VIP 管理)
配置参数 candidate_master, check_repl_delay
切换验证 VIP 漂移,从库重新指向
LAMP + WordPress Apache + PHP + MySQL 虚拟主机配置,WordPress 安装
源码安装 MySQL 5.7 编译 cmake, make, make install

十二、常见故障排查速查表

现象 可能原因 解决方法
Slave_IO_Running: No 网络不通、账号错误、binlog 位置错误 检查 Last_IO_Error,重新 CHANGE MASTER TO
Slave_SQL_Running: No 主键冲突、SQL 语法错误 STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;
MHA 不切换 ssh 免密失败、复制状态异常 重新检查 masterha_check_sshmasterha_check_repl
VIP 不漂移 脚本权限、网卡名错误 检查脚本中 ifdev 变量,手动执行 ifconfig 测试
WordPress 连接数据库失败 数据库主机 IP 错误、用户未授权 确认 MySQL 授权中 'wordpresser'@'192.168.108.%'
Amoeba 连接 MySQL 失败 后端授权不足 GRANT ALL ON *.* TO 'test'@'192.168.108.%'

本合刊至此结束,涵盖从基础复制到企业级高可用架构的完整实践链路。建议动手搭建环境,逐一验证各环节,以加深理解。后续可根据需要深入学习:MySQL 优化、分库分表、分布式数据库等进阶内容。

相关推荐
张小姐的猫2 小时前
【Linux】多线程 —— 线程池 | 单例模式 | 常见锁
linux·运维·服务器·c++·单例模式·设计模式·策略模式
无限进步_2 小时前
【Linux】进程状态、僵尸与孤儿、进程调度
linux·运维·服务器·开发语言·数据结构·算法
踏着七彩祥云的小丑2 小时前
嵌入式测试学习第 30 天:功耗测试、待机电流、工作电流测试
单片机·嵌入式硬件·学习
AI_零食2 小时前
鸿蒙原生 ArkTS:border 的盒模型、深层嵌套约束传递与 scale 缩放
学习·华为·harmonyos·鸿蒙·鸿蒙系统
searchforAI2 小时前
培训视频转文字后怎么做团队复盘?把本地视频整理成AI笔记的实操方案
人工智能·笔记·ai·whisper·音视频·语音识别·腾讯会议
Amnesia0_02 小时前
MYSQL中表的基本查询
数据库·mysql
鲁子狄2 小时前
lrnev:让 AI 协作开发「有记忆、可追溯」的项目治理引擎 | 零模型依赖,文件即真相
人工智能·笔记·gpt·ai·ai编程
Urbano2 小时前
工业及物流工装制作流程与各工序自动化替代方案
运维·自动化
加油码2 小时前
Linux IO 多路转接详解:从 select、poll 到 epoll
linux·c++