如何配置CentOS PHP MySQL连接,轻松实现高效数据库管理?

更新于
2026-08-21 17:56:09
4阅读来源:SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

一、痛点速览:为什么你总是连不上 MySQL?

常见的踩坑点包括:

  • 卸载不干净的 mariadb-libs导致 mysql-community-server 安装冲突。
  • 初始化后忘记修改临时 root 密码或禁用密码过期,致使 登录失败。
  • 未配置 bind-address/防火墙/SELinux,外部客户端出现 “Connection refused” 或超时。
  • 直接使用 root@'%' 给业务账号,安全风险极大。
  • MySQL 8 默认使用 caching_sha2_password老旧的 PHP 5.x 无法兼容,引发 “Auntication plugin 'caching_sha2_password' not supported” 错误。

二、环境准备:在 CentOS 7/8 上安装 MySQL 8 官方 RPM 仓库

1️⃣ 卸载残留的 MariaDB 包

# yum remove -y mariadb-libs

2️⃣ 添加 Oracle 官方 MySQL 仓库并启用 8.0 仓库

# rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-5.noarch.rpm # CentOS 7
# rpm -Uvh https://repo.mysql.com/mysql80-community-release-el8-5.noarch.rpm # CentOS 8
# yum-config-manager --disable mysql80-community-source
# yum-config-manager --enable mysql80-community

3️⃣ 安装 MySQL Server 并开启服务

# yum install -y mysql-community-server
# systemctl start mysqld
# systemctl enable mysqld

三、MySQL 初始安全配置

a) 获取临时 root 密码并立即修改

# grep 'temporary password' /var/log/mysqld.log
A temporary password is generated for root@localhost: P@ssw0rd!
# mysql -uroot -p'P@ssw0rd!'
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrong!Pass123',mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;按理说,mysql> FLUSH PRIVILEGES;

b) 运行安全脚本

# mysql_secure_installation

c) SELinux 与防火墙放行端口 3306

# firewall-cmd --permanent --add-service=mysql
# firewall-cmd --reload
# setsebool -P httpd_can_network_connect_db on # Apache/PHP 能访问 DB
# semanage port -a -t mysqld_port_t -p tcp 3306 # 若自定义端口需手动添加

四、远程访问与 bind‑address 配置

默认情况下 MySQL 只监听本地回环地址。若需要外部机器访问:

如何配置CentOS PHP MySQL连接,轻松实现高效数据库管理?
# vi /etc/my.cnf.d/mysql-server.cnf
bind-address = 0.0.0.0 # 或者指定具体 IP,如 192.168.1.100
max_connections = 500 # 根据业务需求调大
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES # 推荐设置

修改后重启这方面。

# systemctl restart mysqld

五、为业务创建专用数据库使用者

a) 限定 Host 并最小化权限

# mysql -uroot -p
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;CREATE USER 'myapp_user'@'192.168.%' IDENTIFIED BY 'App$ecret2026!',GRANT SELECT,INSERT,UPDATE。DELETE ON myapp.* TO 'myapp_user'@'192.168.%';FLUSH PRIVILEGES;

b) 避免使用 root 或通配符 % 登录生产环境

六、在 CentOS 上安装 PHP 与 MySQL

a) 安装 PHP 主体与常用模块

# yum install -y epel-release yum-utils
# yum install -y https://rpms.remirepo.org/enterprise/remi-release-7.rpm # CentOS 7
# yum install -y https://rpms.remirepo.org/enterprise/remi-release-8.rpm # CentOS 8
# yum module reset php
# yum module enable php:remi-7.4 # 可自行选择 php:remi-8.0 等
# yum install -y php php-cli php-fpm php-mysqlnd php-pdo php-json php-common
# systemctl restart php-fpm httpd # Apache 为 httpd,Nginx 为 nginx

b) 检查 PHP 是否已加载 MySQL 驱动

# php -m | grep -E 'mysqli|pdo_mysql'
mysqli
pdo_mysql

七、PHP 数据库连接示例与常用方法

a) 使用 mysqli 的面向过程写法


$conn = mysqli_connect;

b) 使用 PDO 的异常模式

try { $pdo = new PDO;怎么说呢,echo "✅ PDO 连接成功!",} catch { die); } >

将上述文件保存为 /var/www/html/db_test.php​ ,接下来在浏览器访问 检查输出是否显示 “✅”。若仍报错,请对照下方排查表。

八、常见错误排查清单

如果以上都检查无误,建议查看程序日志:
# journalctl -u mysqld -f // 实时监控 MySQL 日志
# tail -f /var/log/httpd/error_log // Apache 错误日志
# ausearch -m avc –ts recent | audit2allow –w –a // SELinux 拒绝记录

Error 信息 / 症状 可能原因 方法
"Access denied for user ..."- 使用者或密码错误 - 主机限制不匹配 - 密码加密插件不兼容 - 确认 User@Host' 与 CREATE USER 中一致 - 若报插件错误,将使用者改为
"Connection refused"- 防火墙未放行3306 - SELinux 拒绝网络访问 - bind‑address 限制本地 only - 执行前文防火墙 & SELinux 命令 - 检查 /etc/my.cnf.d/mysql-server.cnf 中 bind‑address 设置
"Can't connect to MySQL server on ... " - 网络路由不可达 - 主机名解析错误 - 用 telnet / nc 验证端口连通性 - 确认 DNS 或 /etc/hosts 正确指向 DB IP
"Auntication plugin `caching_sha2_password` cannot be loaded"- PHP 不支持新插件 - 使用 `php-mysqlnd` + `php-pdo_mysql`/ - 或强制改为 native_password: `ALTER USER ... IDENTIFIED WITH mysql_native_password BY ...;`

九、性能提高小技巧

  • Caching SHA‑256 vs native_password:Larger auntication overhead 在高并发场景下可改回 native_password。
  • Persistent Connection:PDO 持久化可通过 DSN 参数 `persistent=true` 减少握手次数。
  • Tuning my.cnf 参数:`innodb_buffer_pool_size` 建议设为服务器内存的 70%。`query_cache_type=0`,开启 `slow_query_log` 捕获慢查询。
  • AIO 与线程池:`innodb_io_capacity` 与 `innodb_thread_concurrency` 根据磁盘 I/O 能力调优。
  • ZSTD 压缩:`innodb_compression_level=9` 对 SSD 有显著节省空间且性能影响小。
  • Lets use **OPcache** 为 PHP 脚本预编译,加速查询前的业务逻辑处理。
  • Migrate heavy read operations to **Read Replica**,主从分离后在从库上做报表查询。

十、完整步骤回顾 & 一键脚本

*以下脚本仅作演示,请根据实际环境替换密码和 IP 地址。执行前务必做好程序快照或备份!*


set -e

----- 步骤1:清理 MariaDB -----

yum remove -y mariadb-libs || true

----- 步骤2:添加官方仓库 -----

rpm -Uvh https://repo.mysql.com/mysql80-community-release-el$.noarch.rpm

----- 步骤3:安装 MySQL -----

yum install -y mysql-community-server

systemctl enable --now mysqld

----- 步骤4:获取临时密码并修改 -----

temppw=$ newpw='YourStrong!Pass123'

mysqladmin --user=root --password="$temppw" password "$newpw" mysql

----- 步骤5:防火墙 & SELinux -----

firewall-cmd --permanent --add-service=mysql && firewall-cmd --reload setsebool -P httpdcannetworkconnectdb on

----- 步骤6:bind-address 改为所有 IP -----

sed -i '/^bind-address/s/.*/bind-address = 0.0.0.0/' /etc/my.cnf.d/mysql-server.cnf || true systemctl restart mysqld

----- 步骤7:创建业务库和使用者 -----

cat pw" CREATE DATABASE IF NOT EXISTS myapp CHARACTER SET utf8mb4 COLLATE utf8mb4unicodeci;CREATE USER IF NOT EXISTS 'myappuser'@'%' IDENTIFIED WITH mysqlnativepassword BY 'App\$ecret2026!',GRANT SELECT,INSERT,UPDATE。DELETE ON myapp.* TO 'myapp_user'@'%';说起来,FLUSH PRIVILEGES;EOSQL

如何配置CentOS PHP MySQL连接,轻松实现高效数据库管理?

----- 步骤8:安装 PHP + -----

yum install -y epel-release yum-utils && \ yum module reset php && \ yum module enable php:remi-7.4 && \ yum install -y php php-cli php-fpm php-mysqlnd php-pdo && \ systemctl enable --now httpd php-fpm

----- 步骤9:验证 PHP 是否加载驱动 -----

php -r "foreach{ echo extensionloaded?'\$ext OK':'\$ext MISSING';echo PHPEOL;}"

echo "✅ 所有步骤完成!请将 db_test.php 放到 /var/www/html 并访问验证。" EOF

标签:CentOS

一、痛点速览:为什么你总是连不上 MySQL?

常见的踩坑点包括:

  • 卸载不干净的 mariadb-libs导致 mysql-community-server 安装冲突。
  • 初始化后忘记修改临时 root 密码或禁用密码过期,致使 登录失败。
  • 未配置 bind-address/防火墙/SELinux,外部客户端出现 “Connection refused” 或超时。
  • 直接使用 root@'%' 给业务账号,安全风险极大。
  • MySQL 8 默认使用 caching_sha2_password老旧的 PHP 5.x 无法兼容,引发 “Auntication plugin 'caching_sha2_password' not supported” 错误。

二、环境准备:在 CentOS 7/8 上安装 MySQL 8 官方 RPM 仓库

1️⃣ 卸载残留的 MariaDB 包

# yum remove -y mariadb-libs

2️⃣ 添加 Oracle 官方 MySQL 仓库并启用 8.0 仓库

# rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-5.noarch.rpm # CentOS 7
# rpm -Uvh https://repo.mysql.com/mysql80-community-release-el8-5.noarch.rpm # CentOS 8
# yum-config-manager --disable mysql80-community-source
# yum-config-manager --enable mysql80-community

3️⃣ 安装 MySQL Server 并开启服务

# yum install -y mysql-community-server
# systemctl start mysqld
# systemctl enable mysqld

三、MySQL 初始安全配置

a) 获取临时 root 密码并立即修改

# grep 'temporary password' /var/log/mysqld.log
A temporary password is generated for root@localhost: P@ssw0rd!
# mysql -uroot -p'P@ssw0rd!'
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrong!Pass123',mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;按理说,mysql> FLUSH PRIVILEGES;

b) 运行安全脚本

# mysql_secure_installation

c) SELinux 与防火墙放行端口 3306

# firewall-cmd --permanent --add-service=mysql
# firewall-cmd --reload
# setsebool -P httpd_can_network_connect_db on # Apache/PHP 能访问 DB
# semanage port -a -t mysqld_port_t -p tcp 3306 # 若自定义端口需手动添加

四、远程访问与 bind‑address 配置

默认情况下 MySQL 只监听本地回环地址。若需要外部机器访问:

如何配置CentOS PHP MySQL连接,轻松实现高效数据库管理?
# vi /etc/my.cnf.d/mysql-server.cnf
bind-address = 0.0.0.0 # 或者指定具体 IP,如 192.168.1.100
max_connections = 500 # 根据业务需求调大
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES # 推荐设置

修改后重启这方面。

# systemctl restart mysqld

五、为业务创建专用数据库使用者

a) 限定 Host 并最小化权限

# mysql -uroot -p
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;CREATE USER 'myapp_user'@'192.168.%' IDENTIFIED BY 'App$ecret2026!',GRANT SELECT,INSERT,UPDATE。DELETE ON myapp.* TO 'myapp_user'@'192.168.%';FLUSH PRIVILEGES;

b) 避免使用 root 或通配符 % 登录生产环境

六、在 CentOS 上安装 PHP 与 MySQL

a) 安装 PHP 主体与常用模块

# yum install -y epel-release yum-utils
# yum install -y https://rpms.remirepo.org/enterprise/remi-release-7.rpm # CentOS 7
# yum install -y https://rpms.remirepo.org/enterprise/remi-release-8.rpm # CentOS 8
# yum module reset php
# yum module enable php:remi-7.4 # 可自行选择 php:remi-8.0 等
# yum install -y php php-cli php-fpm php-mysqlnd php-pdo php-json php-common
# systemctl restart php-fpm httpd # Apache 为 httpd,Nginx 为 nginx

b) 检查 PHP 是否已加载 MySQL 驱动

# php -m | grep -E 'mysqli|pdo_mysql'
mysqli
pdo_mysql

七、PHP 数据库连接示例与常用方法

a) 使用 mysqli 的面向过程写法


$conn = mysqli_connect;

b) 使用 PDO 的异常模式

try { $pdo = new PDO;怎么说呢,echo "✅ PDO 连接成功!",} catch { die); } >

将上述文件保存为 /var/www/html/db_test.php​ ,接下来在浏览器访问 检查输出是否显示 “✅”。若仍报错,请对照下方排查表。

八、常见错误排查清单

如果以上都检查无误,建议查看程序日志:
# journalctl -u mysqld -f // 实时监控 MySQL 日志
# tail -f /var/log/httpd/error_log // Apache 错误日志
# ausearch -m avc –ts recent | audit2allow –w –a // SELinux 拒绝记录

Error 信息 / 症状 可能原因 方法
"Access denied for user ..."- 使用者或密码错误 - 主机限制不匹配 - 密码加密插件不兼容 - 确认 User@Host' 与 CREATE USER 中一致 - 若报插件错误,将使用者改为
"Connection refused"- 防火墙未放行3306 - SELinux 拒绝网络访问 - bind‑address 限制本地 only - 执行前文防火墙 & SELinux 命令 - 检查 /etc/my.cnf.d/mysql-server.cnf 中 bind‑address 设置
"Can't connect to MySQL server on ... " - 网络路由不可达 - 主机名解析错误 - 用 telnet / nc 验证端口连通性 - 确认 DNS 或 /etc/hosts 正确指向 DB IP
"Auntication plugin `caching_sha2_password` cannot be loaded"- PHP 不支持新插件 - 使用 `php-mysqlnd` + `php-pdo_mysql`/ - 或强制改为 native_password: `ALTER USER ... IDENTIFIED WITH mysql_native_password BY ...;`

九、性能提高小技巧

  • Caching SHA‑256 vs native_password:Larger auntication overhead 在高并发场景下可改回 native_password。
  • Persistent Connection:PDO 持久化可通过 DSN 参数 `persistent=true` 减少握手次数。
  • Tuning my.cnf 参数:`innodb_buffer_pool_size` 建议设为服务器内存的 70%。`query_cache_type=0`,开启 `slow_query_log` 捕获慢查询。
  • AIO 与线程池:`innodb_io_capacity` 与 `innodb_thread_concurrency` 根据磁盘 I/O 能力调优。
  • ZSTD 压缩:`innodb_compression_level=9` 对 SSD 有显著节省空间且性能影响小。
  • Lets use **OPcache** 为 PHP 脚本预编译,加速查询前的业务逻辑处理。
  • Migrate heavy read operations to **Read Replica**,主从分离后在从库上做报表查询。

十、完整步骤回顾 & 一键脚本

*以下脚本仅作演示,请根据实际环境替换密码和 IP 地址。执行前务必做好程序快照或备份!*


set -e

----- 步骤1:清理 MariaDB -----

yum remove -y mariadb-libs || true

----- 步骤2:添加官方仓库 -----

rpm -Uvh https://repo.mysql.com/mysql80-community-release-el$.noarch.rpm

----- 步骤3:安装 MySQL -----

yum install -y mysql-community-server

systemctl enable --now mysqld

----- 步骤4:获取临时密码并修改 -----

temppw=$ newpw='YourStrong!Pass123'

mysqladmin --user=root --password="$temppw" password "$newpw" mysql

----- 步骤5:防火墙 & SELinux -----

firewall-cmd --permanent --add-service=mysql && firewall-cmd --reload setsebool -P httpdcannetworkconnectdb on

----- 步骤6:bind-address 改为所有 IP -----

sed -i '/^bind-address/s/.*/bind-address = 0.0.0.0/' /etc/my.cnf.d/mysql-server.cnf || true systemctl restart mysqld

----- 步骤7:创建业务库和使用者 -----

cat pw" CREATE DATABASE IF NOT EXISTS myapp CHARACTER SET utf8mb4 COLLATE utf8mb4unicodeci;CREATE USER IF NOT EXISTS 'myappuser'@'%' IDENTIFIED WITH mysqlnativepassword BY 'App\$ecret2026!',GRANT SELECT,INSERT,UPDATE。DELETE ON myapp.* TO 'myapp_user'@'%';说起来,FLUSH PRIVILEGES;EOSQL

如何配置CentOS PHP MySQL连接,轻松实现高效数据库管理?

----- 步骤8:安装 PHP + -----

yum install -y epel-release yum-utils && \ yum module reset php && \ yum module enable php:remi-7.4 && \ yum install -y php php-cli php-fpm php-mysqlnd php-pdo && \ systemctl enable --now httpd php-fpm

----- 步骤9:验证 PHP 是否加载驱动 -----

php -r "foreach{ echo extensionloaded?'\$ext OK':'\$ext MISSING';echo PHPEOL;}"

echo "✅ 所有步骤完成!请将 db_test.php 放到 /var/www/html 并访问验证。" EOF

标签:CentOS