Wishlist 0 ¥0.00

拥抱变化:为什么 Joomla 5 对 MySQL 8 的要求是一个飞跃......

11 月-MySQL

Joomla 5 于 10 月 17 日发布,标志着 CMS 发展的一个重要里程碑。这个最新版本历时两年,以其无与伦比的安全性、快速的性能和出色的代码质量提升了 Joomla 的体验。这一飞跃的核心是 Joomla 对创新、性能和安全性的坚定不移的奉献,因此其底层数据库系统必须与之匹配。

了解 Joomla 5 的技术要求

虽然由于 MySQL 8 的托管限制,一些用户在升级到 Joomla 5 时面临挑战,但了解此决定背后的基本原理至关重要。这不仅仅是一种偏好,而是与 Joomla 的安全和创新核心价值观的战略一致性。随着 MySQL 5.7 的生命周期即将结束,软件本身已经使用了 8 年,向 MySQL 8.0 的过渡既及时又关键。


技术进步

MySQL 8.0 于 2018 年推出,不仅是一项更新,而且是一项重大进步。它为 SQL、JSON、GIS、可靠性、可观察性、可管理性、安全性和性能带来了增强功能。此版本不仅仅是关于错误修复;它代表了 Oracle 持续交付和创新的新时代。更详细的列表可以在 MySQL 博客上找到。

MySQL 8.0 的强大之处在于其增强的性能、强大的安全策略和优化的资源管理。这使其成为维护 Joomla 高标准性能、稳定性和安全性不可或缺的工具。


Joomla 5.x 数据库要求:快速概述

对于那些寻求技术细节的人来说,Joomla 5.x 支持各种数据库系统。推荐版本和最低版本如下

更多信息可以在 Joomla 文档
中找到

数据库 推荐 最低
MySQL (MySQL的 8.1 8.013
MariaDB的 11.1.0 10.4.0
PostgreSQL 数据库 16.0 12.0



驾驭过渡:了解 MySQL 版本

了解 MySQL 的发布历史记录和支持时间表至关重要。下面是一个快速指南:

释放 正式发布 最新的次要版本 最新版本 支持终止
5.7 LTS 21st 十月 2015 5.7.44 2023-10-25 2023 年 10 月
8.0 LTS 19th 四月 2018 8.0.35 2023-10-25 2026 年 4 月
8.1 18th月2023 8.1.0 2023-07-18 红外
8.2 25th月2023 8.2.0 2023-10-25 红外

LTS - 长期支持版本
IR - 创新版本

IR 和 LTS 有什么区别?IR 和 LTS 都是生产级质量,但是如果您想访问最新功能和改进,那么 Oracle 表示创新版本是最合适的。

应对过时托管环境的挑战

与未更新到 MySQL 8 相关的主要问题或风险包括安全性漏洞,这可能会使您的网站或应用程序受到攻击。如前所述,性能问题 MySQL 8 引入了许多性能改进。继续使用 5.7 会错过这些好处。


为什么有些托管供应商不使用 MySQL 8.0?

一些托管服务提供商不愿意采用 MySQL 8.0,通常是由于担心停机和服务中断,这带来了挑战。但是,不更新的风险(尤其是在安全漏洞和性能缺陷方面)是巨大的。对于企业和电子商务平台,使用 MySQL 版本保持最新不仅仅是一个建议;这是必要的。


使用 MySQL 5.7 安全吗?


使用是否安全取决于您的具体需求以及您的托管供应商正在采取哪些步骤来保护您的网站或应用程序免受漏洞的影响。如果它是一个非关键应用程序,例如个人博客,您可能会争辩说它可以 再使用一段时间;但是,如果它是一个商业网站或电子商务商店,那么您确实应该升级到较新版本的 MySQL。


如果您的托管供应商仍在使用 MySQL 5.7,您应该怎么做?

如果您的托管服务提供商仍在 MySQL 5.7 上运行,请发起有关其升级计划和安全措施的对话。 如果您的托管供应商不打算升级到较新版本的 MySQL,或者您对他们的响应不满意,您可能需要考虑切换到使用较新版本的 MySQL 的其他托管服务提供商。大多数托管供应商都提供迁移服务以简化流程。或者,您可能想调查您的托管供应商是否提供其他兼容的数据库系统,例如 MariaDB。

MySQL 8 在本地环境中面临的挑战:

深入了解 MAMP

目前,MAMP 仅限于 MySQL 5.7,这导致了与 Joomla 5 的兼容性问题。MAMP 支持论坛上的讨论揭示了对 MySQL 8 集成的预期,预计将于今年晚些时候在 MAMP Pro 中集成。在线表达担忧的用户热切期待此次升级,为随后将其包含在 MAMP 的免费版本中带来了希望。

在此期间,出现了解决方法。例如,通过 Docker 容器将 MySQL 8 与 MAMP 集成虽然并不理想,但证明是有效的。macOS 用户可以探索 DBngin,无需离开 MAMP 即可实现数据库链接,或者探索 Herd 以获得简化的解决方案。

考虑替代方案:适应策略

在我们度过这个过渡阶段时,XAMPP 作为一个实用的临时解决方案出现,提供 MySQL 8 支持。在 MAMP Pro 7 到来之前,这种替代方案可能会很好地发挥作用。


结论

Joomla 决定将 MySQL 8 作为一项技术要求集成,这是一项前瞻性的举措,强调了其致力于提供安全、高效和最先进的 CMS 体验的承诺。此步骤可确保长期支持、与现代技术的兼容性以及增强的用户体验,其特点是提高了安全性和性能。但是,同样重要的是要注意,您不需要立即升级到 Joomla 5,您可以继续使用 4.4,直到您的提供商支持必要的数据库系统。

MySQL 8.0关闭binlog

MySQL 8.0关闭binlog默认开启binlog,即使在my.ini或my.cnf的[mysqld]部分没有

log_bin

log_bin = mysql-bin

binlog默认在Linux的/var/lib/mysql目录下,文件名为binlog.000001格式,在Windows的data目录下,文件名为binlog.000001格式

相当于默认有 log_bin=binlog 参数

如果需要关闭binlog

在my.ini或my.cnf的[mysqld]部分添加

skip-log-bin

然后重启mysql即可。

 

或者 expire_logs_days =2 ,只保留2天。

 

show global variables like 'log_bin%';

Variable_name |Value |
-------------------------------|---------------------------|
log_bin |ON |
log_bin_basename |/var/lib/mysql/binlog |
log_bin_index |/var/lib/mysql/binlog.index|
log_bin_trust_function_creators|OFF |
log_bin_use_v1_row_events |OFF |

show global variables like '%logs%';

Variable_name |Value |
--------------------------|-------|
binlog_expire_logs_seconds|2592000|
expire_logs_days |0 |
innodb_print_ddl_logs |OFF |

binlog默认保存30天

show global variables like '%binlog_format%';

Variable_name|Value|
-------------|-----|
binlog_format|ROW |
————————————————

mysql优化(连接数、最大并发数)

目录

1、max_connections最大连接数

1.1、查询数据库当前设置的最大连接数

1.2、调整max_connections参数的值

1.2.1、方式一:实时(临时)修改此参数的值

1.2.2、方式二:在配置文件my.ini中设置max_connections的值

2、max_used_connections 查看最大连接数

3、max_user_connections 每个MySQL用户的最大连接数

3.1、查看全局每个用户最大连接数max_user_connections

 3.2、设置全局每个用户最大连接数max_user_connections

3.3、 针对某个用户进行最大连接数限制

4、mysql服务器的线程数 

4.1、查看mysql的线程情况

4.2、thread_cache_size缓存线程 优化

4,2.1、查询thread_cache_size

4.2.2、设置线程缓存数量 thread_cache_size


 

  1.  
    -- 查看最大连接数
  2.  
    show variables like '%max_connection%'
  3.  
     
  4.  
    -- 重新设置最大连接数
  5.  
    set global max_connections=700;   
  6.  
     
  7.  
    -- 查看数据库状态
  8.  
    -- threads_created:表示创建过的线程数,threads_created过大,
  9.  
    -- 表明mysql服务器一直在创建线程,这也是比较耗资源,说明服务器不健康。
  10.  
    show status like  'Threads%';
  11.  
     
  12.  
    -- 查询服务器 thread_cache_size 配置
  13.  
    show variables like 'thread_cache_size';
  14.  
    -- 设置 线程缓存数量
  15.  
    set global thread_cache_size=100;

1、max_connections最大连接数

1.1、查询数据库当前设置的最大连接数

show variables like '%max_connections%';

MySQL无论如何都会保留一个用于管理员(SUPER)登陆的连接,用于管理员连接数据库进行维护操作,即使当前连接数已经达到了max_connections。因此MySQL的实际最大可连接数为max_connections+1;
 这个参数实际起作用的最大值(实际最大可连接数)为16384,即该参数最大值不能超过16384,即使超过也以16384为准;

增加max_connections参数的值,不会占用太多系统资源。系统资源(CPU、内存)的占用主要取决于查询的密度、效率等

该参数设置过小的最明显特征是出现”Too many connections”错误;

MySQL比较理想的最大连接数计算方式为max_used_connections / max_connections*100% ≈ 85%

最大连接数占上限连接数的85%左右,如果发现比例在10%以下,MySQL服务器连接数上限设置的过高了。

1.2、调整max_connections参数的值

1.2.1、方式一:实时(临时)修改此参数的值

使用root用户登录。

set global max_connections=1000;   

修改完成后实时生效,无需重启MySQL。

总体来说,该参数在服务器资源够用的情况下应该尽量设置大,以满足多个客户端同时连接的需求。否则将会出现类似”Too many connections”的错误。

1.2.2、方式二:在配置文件my.ini中设置max_connections的值

找到max_connections一行,修改为(如果没有,则自己添加)1000.

mysql数据库日志binlog保存时效(expire_logs_days)

 本文详细介绍了MySQL的binlog日志过期删除策略,包括通过设置max_binlog_size和expire_logs_days参数来管理日志大小和保留时间。实验表明MySQL根据binlog文件的系统时间判断是否过期,且在触发删除时,会从最老的binlog开始检查,删除过期日志。此外,还展示了如何通过flushlogs和purge命令手动清理binlog。

展开 

一、设置语法

1、方法一:

编辑/etc/my.cnf文件,在[mysqld]节点中增加如下两行

max_binlog_size = 500M
expire_logs_days = 15

max_binlog_size:bin log日志每达到设定大小后,会使用新的bin log日志。如mysql-bin.000002达到500M后,创建并使用mysql-bin.000003文件作为日志记录。

expire_logs_days:保留指定日期范围内的bin log历史日志,上示例设置的15天内。

2、方法二:
-- mysql8.0以下版本查看当前数据库日志binlog保存时效 以天为单位,默认0 永不过期,最多只能设置99天
show variables like 'expire_logs_days';
set global expire_logs_days=60;

-- mysql8.0以上版本通过设置全局参数binlog_expire_logs_seconds修改binlog保存时间 以秒为单位;默认2592000 30天   14400   4小时;86400  1天;259200  3天
show variables like '%binlog_expire_logs_seconds%';

set global binlog_expire_logs_seconds=259200;

二、过期删除策略

总结:
通过下面的实验,对于mysql binlog过期删除策略,我们可以做出如下推测。
1. mysql是根据binlog文件的操作系统最近修改时间,来判断binlog是否过期(而不是根据binlog日志中事物发生的时间)。
2. 在触发mysql过期删除时,mysql先检查*bin.index文件,找到目前最老的binlog,然后检查该文件的系统时间,会有如下两种情况:
1)如果发现该文件未过期,则认为目前没有binlog日志过期,不进行删除,即使此时有其他binlog已过期。
2)如果发现该文件已经过期,则会找下一个binlog,判断是否过期,同样存在两种情况(过期或者未过期),如此往复,直到找到第一个过期的binlog 即停止继续查找,并删除该binlog及所有该binlog之前的所有日志

1. 查看数据库binlog列表
1)
mysql> show binary logs;
+-----------------+------------+
| Log_name        | File_size  |
+-----------------+------------+
| 3306-bin.000006 | 1074742033 |
| 3306-bin.000007 | 1074580678 |
| 3306-bin.000008 | 1074739627 |
| 3306-bin.000009 |  250635228 |
| 3306-bin.000010 |        120 |
+-----------------+------------+
5 rows in set (0.00 sec)
 
2) 
ls -lrt
total 7402312
-rw-r--r-- 1 root  root        1747 Mar 25 10:06 test
-rw-rw---- 1 mysql mysql 1074742032 May  4 16:48 3306-bin.000006
-rw-rw---- 1 mysql mysql 1074580678 May  4 16:54 3306-bin.000007
-rw-rw---- 1 mysql mysql 1074739627 May  4 17:00 3306-bin.000008
-rw-rw---- 1 mysql mysql        168 May  4 17:00 3306-bin.index
-rw-rw---- 1 mysql mysql  250635182 May  4 17:02 3306-bin.000009
-rw-rw---- 1 mysql mysql   10448198 May 27 05:04 slow3306.log
-rw-r----- 1 mysql root     1096759 May 27 05:06 error3306.log
-rw-rw---- 1 mysql mysql 4093675902 May 27 05:06 general3306.log
##我们看到mysql目前保留着4个binlog日志,序号从6到9,当前正在使用的为序号为9的日志
 
2. 设定binlog过期时间
set global expire_logs_days=7;
##在第1步中我们可以看到3306-bin.000006,3306-bin.000007,3306-bin.000008 三个日志都是属于过期的(因为3306-bin.000009是当前正在使用的日志,所以不是过期日志)
 
3. 修改3306-bin.000006文件系统时间
使用 vi 查看3306-bin.000006文件,不做任何修改保存退出。
 
4. 修改后查看binlog文件时间
ls -lrt
total 7402312
-rw-r--r-- 1 root  root        1747 Mar 25 10:06 test
-rw-rw---- 1 mysql mysql 1074580678 May  4 16:54 3306-bin.000007
-rw-rw---- 1 mysql mysql 1074739627 May  4 17:00 3306-bin.000008
-rw-rw---- 1 mysql mysql        168 May  4 17:00 3306-bin.index
-rw-rw---- 1 mysql mysql  250635182 May  4 17:02 3306-bin.000009
-rw-rw---- 1 mysql mysql   10448198 May 27 05:04 slow3306.log
-rw-r----- 1 mysql root     1096759 May 27 05:06 error3306.log
-rw-rw---- 1 mysql mysql 4093675902 May 27 05:06 general3306.log
-rw-rw---- 1 mysql mysql 1074742033 May 27 10:13 3306-bin.000006
##3306-bin.000006 日志文件已经系统日志已经变成当天时间
 
5. flush logs;
##我们知道flush logs;会触发过期日志清除操作
 
6. 查看现有binlog
1)  mysql> show binary logs;
+-----------------+------------+
| Log_name        | File_size  |
+-----------------+------------+
| 3306-bin.000006 | 1074742033 |
| 3306-bin.000007 | 1074580678 |
| 3306-bin.000008 | 1074739627 |
| 3306-bin.000009 |  250635228 |
| 3306-bin.000010 |        120 |
+-----------------+------------+
5 rows in set (0.00 sec)
 
2)  ls -lrt
total 7402316
-rw-r--r-- 1 root  root        1747 Mar 25 10:06 test
-rw-rw---- 1 mysql mysql 1074580678 May  4 16:54 3306-bin.000007
-rw-rw---- 1 mysql mysql 1074739627 May  4 17:00 3306-bin.000008
-rw-r----- 1 mysql root     1096759 May 27 05:06 error3306.log
-rw-rw---- 1 mysql mysql 1074742033 May 27 10:13 3306-bin.000006
-rw-rw---- 1 mysql mysql   10448370 May 27 10:14 slow3306.log
-rw-rw---- 1 mysql mysql 4093676334 May 27 10:14 general3306.log
-rw-rw---- 1 mysql mysql  250635228 May 27 10:14 3306-bin.000009
-rw-rw---- 1 mysql mysql        120 May 27 10:14 3306-bin.000010
-rw-rw---- 1 mysql mysql        210 May 27 10:14 3306-bin.index
##我们发现3306-bin.000006,3306-bin.000007,3306-bin.000008三个日志并没有被删除(此时3306-bin.000006文件系统时间为当天,3306-bin.000007和3306-bin.000008文件时间都是4号)
 
7. purge 最早的3306-bin.000006日志
1)  mysql> purge master logs to '3306-bin.000007';
Query OK, 0 rows affected (0.31 sec)
 
2)  mysql> show binary logs;
+-----------------+------------+
| Log_name        | File_size  |
+-----------------+------------+
| 3306-bin.000007 | 1074580678 |
| 3306-bin.000008 | 1074739627 |
| 3306-bin.000009 |  250635228 |
| 3306-bin.000010 |        120 |
+-----------------+------------+
4 rows in set (0.01 sec)
 
3)  ls -lrt
total 6352756
-rw-r--r-- 1 root  root        1747 Mar 25 10:06 test
-rw-rw---- 1 mysql mysql 1074580678 May  4 16:54 3306-bin.000007
-rw-rw---- 1 mysql mysql 1074739627 May  4 17:00 3306-bin.000008
-rw-r----- 1 mysql root     1096759 May 27 05:06 error3306.log
-rw-rw---- 1 mysql mysql   10448370 May 27 10:14 slow3306.log
-rw-rw---- 1 mysql mysql  250635228 May 27 10:14 3306-bin.000009
-rw-rw---- 1 mysql mysql        120 May 27 10:14 3306-bin.000010
-rw-rw---- 1 mysql mysql        168 May 27 10:17 3306-bin.index
-rw-rw---- 1 mysql mysql 4093676603 May 27 10:17 general3306.log
 
##3306-bin.000006日志已经被删除
 
8. 再次flush logs;
1) flush logs;
mysql> flush logs;
Query OK, 0 rows affected (0.30 sec)
 
2)查看 binlog
mysql> show binary logs;
+-----------------+-----------+
| Log_name        | File_size |
+-----------------+-----------+
| 3306-bin.000009 | 250635228 |
| 3306-bin.000010 |       166 |
| 3306-bin.000011 |       120 |
+-----------------+-----------+
3 rows in set (0.00 sec)
 
ls -lrt
total 4253804
-rw-r--r-- 1 root  root        1747 Mar 25 10:06 test
-rw-r----- 1 mysql root     1096759 May 27 05:06 error3306.log
-rw-rw---- 1 mysql mysql  250635228 May 27 10:14 3306-bin.000009
-rw-rw---- 1 mysql mysql   10448542 May 27 10:17 slow3306.log
-rw-rw---- 1 mysql mysql 4093676814 May 27 10:17 general3306.log
-rw-rw---- 1 mysql mysql        166 May 27 10:17 3306-bin.000010
-rw-rw---- 1 mysql mysql        120 May 27 10:17 3306-bin.000011
-rw-rw---- 1 mysql mysql        126 May 27 10:17 3306-bin.index
 
##此时我们发现3306-bin.000007,3306-bin.000008日志已经被自动删除

获取binlog文件列表
show binary logs;
查看指定binlog文件的内容
show binlog events in 'mysql-bin.000002';
只查看第一个binlog文件的内容
show binlog events;

About Us

Since 1996, our company has been focusing on domain name registration, web hosting, server hosting, website construction, e-commerce and other Internet services, and constantly practicing the concept of "providing enterprise-level solutions and providing personalized service support". As a Dell Authorized Solution Provider, we also provide hardware product solutions associated with the company's services.
 

Contact Us

Address: No. 2, Jingwu Road, Zhengzhou City, Henan Province

Phone: 0086-371-63520088 

QQ:76257322

Website: 800188.com

E-mail: This email address is being protected from spambots. You need JavaScript enabled to view it.