今年7月1日(2024年),Mysql发布了9.0版本,相信很多友友还停留在mysql5.7的版本。
MySQL 9.0引入了许多新特性,主要包括性能提升、JSON数据处理增强、安全性升级和功能扩展。??
性能提升
MySQL 9.0通过使用更新的库和编译器(如GCC13),在处理效率、内存管理和并发控制方面有了显著的提升,使得编译后的二进制文件运行速度更快,占用资源更少。线程池插件现在能够在MySQL性能模式中提供更多信息,有助于更有效地分析性能。
JSON数据处理增强
MySQL 9.0增强了对JSON数据的处理能力,允许用户将EXPLAIN ANALYZE命令的JSON输出直接保存到用户变量中,极大简化了查询调试和优化流程。此外,MySQL 8.3版本引入了新的系统变量,允许在EXPLAIN FORMAT=JSON命令中选择不同的JSON输出格式,增强了长期使用的便利性。
安全性升级
MySQL 9.0弃用了SHA-1哈希算法,因为SHA-1已经被认为存在安全漏洞,转而使用更安全的哈希算法来增强数据完整性检查和安全性。同时,MySQL 9.0还弃用了mysql_native_password认证插件,进一步加强了MySQL的安全性,并鼓励用户采用更安全的认证方法。
功能扩展
MySQL 9.0引入了向量数据类型,使得数据库能够更高效地存储和操作多维数据,适用于机器学习、数据科学和高性能计算等领域。此外,MySQL 9.0还允许开发者在数据库中直接编写JavaScript存储程序和函数,增加了数据库脚本语言的灵活性,允许更紧密地集成前端应用和数据库逻辑。
友友们是不是对9.0感觉没啥期待,好像没啥让人升级的特性,笔者是也是,向量数据也不完善,有专门的向量数据库,性能也没有大的提升,mysql会不会慢慢的和他的老伙计php一起走下坡路了。
没关系,9.0无感,8.0还是可以试试的,笔者用了多年,8.0的性能比5.7还是有不少提升的,特别的变更表结构,锁表时间明显有变化。那我们一起来安装8.0玩玩吧。
安装MySQL 8.0
MySQL 8.0是目前的最新主要版本,它带来了许多新特性和改进。以下是几种在不同环境中安装MySQL 8.0的方法。
在Debian/Ubuntu 新版本上安装MySQL 8.0
更新包列表:
sudo apt update
安装MySQL服务器:
sudo apt install mysql-server-8.0
安全配置: 安装完成后,运行以下命令来初始化安全设置:
sudo mysql_secure_installation
按照提示设置root密码,移除匿名用户,禁止root用户远程登录等。
检查服务状态:
sudo systemctl status mysql.service
登录MySQL:
mysql -u root -p
输入你在安全配置中设置的密码。
使用Docker Compose安装MySQL 8.0
使用Docker Compose安装MySQL可以提供一致的环境,简化配置和部署。首先,确保你已经安装了Docker和Docker Compose。
创建Docker Compose文件: 创建一个名为docker-compose.yml的文件,内容如下:
version: '3.8'
services: db:
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: my-secret-pw
ports:
- "3306:3306"
volumes:
- ./data/db:/var/lib/mysql
- ./my.cnf:/etc/mysql/my.cnf
替换my-secret-pw为你自己的强密码,并确保./my.cnf路径在你的主机上是存在的,并且my.cnf文件已经包含了正确的MySQL配置。my.cnf的推荐配置如下。
对于4核8G的服务器配置,以下是一个推荐的my.cnf配置样例:
[mysqld]
# 设置字符集和校对集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 设置最大连接数
max_connections=400
# 设置线程缓存的大小
thread_cache_size=64
# 设置默认存储引擎(mysql8.0默认是InnoDB)
default-storage-engine=InnoDB
# 设置表打开缓存
table_open_cache=400
# 设置最大允许的数据包大小
max_allowed_packet=16M
# 设置InnoDB缓冲池大小,这是最重要的InnoDB设置之一
innodb_buffer_pool_size=4G
# 设置InnoDB日志文件大小
innodb_log_file_size=512M
# 设置InnoDB日志缓冲区大小
innodb_log_buffer_size=16M
# 设置InnoDB刷新日志的方式
innodb_flush_method=O_DIRECT
# 设置InnoDB刷新邻接页
innodb_flush_neighbors=0
# 设置InnoDB I/O线程数
innodb_read_io_threads=4
innodb_write_io_threads=4
# 设置InnoDB并发读写线程数
innodb_thread_concurrency=4
# 设置时区为北京时间
default-time-zone='+08:00'
# 禁用查询缓存,MySQL 8.0默认关闭查询缓存,查询缓存有时候反而降低性能
query_cache_type=0
query_cache_size=0
# 其他性能相关的配置
innodb_buffer_pool_instances=4
innodb_lru_scan_depth=2048
innodb_adaptive_hash_index=ON
innodb_file_per_table=ON
innodb_open_files=600
innodb_stats_on_metadata=OFF
# 网络和连接相关配置
back_log=80
table_definition_cache=1400
thread_stack=256K
# 二进制日志配置(用于复制和恢复)
log_bin=mysql-bin
binlog_format=row
expire_logs_days=10
sync_binlog=1
# 错误日志配置
log_error=/var/log/mysql/error.log
# 慢查询日志配置
slow_query_log=ON
slow_query_log_file=/var/log/mysql/mysql-slow.log
long_query_time=2
说明:
- 字符集和校对集:设置为utf8mb4和utf8mb4_unicode_ci,支持更广泛的Unicode字符。
- 最大连接数:设置为400,根据服务器的负载和需求进行调整。
- 线程缓存:设置为64,根据服务器的负载和需求进行调整。
- InnoDB缓冲池大小:设置为4G,这是最重要的InnoDB设置之一,用于缓存数据和索引。
- InnoDB日志文件大小:设置为512M,用于控制事务日志的大小。
- InnoDB日志缓冲区大小:设置为16M,用于缓存日志数据。
- InnoDB刷新日志的方式:设置为O_DIRECT,直接写入磁盘,减少文件系统缓存的影响。
- InnoDB刷新邻接页:设置为0,禁用邻接页的刷新。
- InnoDB I/O线程数:设置为4,用于控制读写线程数。
- InnoDB并发读写线程数:设置为8,根据CPU核心数进行调整。
- 时区:设置为+00:00,根据实际需求进行调整。
- 查询缓存:禁用查询缓存,因为MySQL 8.0默认关闭查询缓存。
- 二进制日志配置:用于复制和恢复,设置日志格式为row,并设置日志过期天数。
- 错误日志和慢查询日志配置:设置日志文件路径和慢查询时间。
启动MySQL容器:
在docker-compose.yml文件所在的目录下,运行以下命令来启动MySQL容器:
docker-compose up -d
连接到MySQL: 使用MySQL客户端连接到MySQL容器。
docker exec -it mysql -uroot -p
其中
通过以上步骤,你可以在Debian/Ubuntu系统上直接通过apt源或使用Docker Compose安装并配置MySQL 8.0。这为你提供了开始使用MySQL进行数据库操作的基础。接下来,你可以开始创建数据库、表,以及执行SQL查询来管理你的数据。
接下来我们一起看下一些基础概念吧。
数据库基础概念
在深入MySQL的安装之前,理解一些数据库的基本概念是非常重要的。数据库是一种系统,它允许你存储、管理和检索数据。数据库可以是关系型的,也可以是非关系型的。关系型数据库(如MySQL)使用表格的形式来存储数据,并通过关系模型来组织数据。
关键术语:
- 数据库(Database):数据的集合,通常针对特定的应用场景。
- 表(Table):数据库中存储特定类型数据的结构,由行和列组成。
- 行(Row):表中的单个记录。
- 列(Column):表中的一个字段,所有行中相同位置的数据。
- SQL(Structured Query Language):用于管理和操作关系数据库的标准编程语言。
- 索引(Index):提高数据库检索速度的数据结构。
NoSQL数据库概念及与MySQL的优缺点对比
NoSQL数据库是指不使用传统的行列结构来存储数据的数据库。NoSQL通常分为以下几种类型:
- 键值数据库:例如Redis,适合缓存和会话管理。
- 文档数据库:例如MongoDB,数据存储在文档中,适合半结构化或非结构化的数据。
- 列族数据库:例如Cassandra,适合列存储模式的高性能查询。
- 图数据库:例如Neo4j,适合存储复杂关系网络。
- 分布式数据库:例如TiDB, OceanBase,兼具MySQL的关系查询优点和列式数据库/KV存储的高性能
NoSQL数据库的优点:
- 灵活性:NoSQL数据库通常具有更灵活的数据模型,可以更容易地适应不断变化的数据需求。
- 可扩展性:NoSQL数据库通常设计为分布式,易于水平扩展,适合处理大量数据。
NoSQL数据库的缺点:
- 查询能力有限:许多NoSQL数据库不支持复杂的查询,如多表连接。
- 缺乏标准化:NoSQL数据库之间差异较大,缺乏统一的标准。
MySQL的优点:
- ACID事务支持:MySQL支持原子性、一致性、隔离性、持久性的ACID事务,适合需要严格数据一致性的应用。
- 强大的查询能力:MySQL支持复杂的SQL查询,适合进行复杂的数据分析。
MySQL的缺点:
- 扩展性:MySQL的扩展性相对较弱,尤其是在水平扩展方面。
- 性能瓶颈:在处理非常大的数据集时,MySQL可能会遇到性能瓶颈。
如果你安装中遇到什么问题,也可以在评论区留言讨论。
关于笔者:笔者是一个从业20年程序员,做过一线研发,做过技术总监,熟练掌握前后端、运维等各种技术,如果你觉得笔者给带了有用的知识,那关注笔者吧,你的关注,是笔者创作的粮食,感谢友友的支持。