1 mysql介绍
MySQL是一个流行的开源关系型数据库管理系统(RDBMS),基于结构化查询语言(SQL)。最初由瑞典的MySQL AB公司开发,后来被Sun Microsystems收购,最终归属于甲骨文(Oracle)公司。MySQL是基于客户端-服务器模型的数据库服务器,广泛用于各种应用,特别是网站和网络应用。
作为世界上最受欢迎的开源关系型数据库之一,MySQL以其高性能、可靠性和易用性在各种行业和应用中得到了广泛应用。它的灵活性和开放性也使其成为数据库技术和云计算领域的重要组成部分。随着技术的不断发展,MySQL持续在性能优化、安全性和易用性方面进行创新,以满足不断变化的应用需求。
1.1 核心特性
-
开源和免费: MySQL是一个开源项目,提供社区版免费使用。它的源代码公开,允许用户查看、修改和扩展。
-
跨平台支持: MySQL可以在多种操作系统上运行,包括Linux、Windows、macOS等。
-
高性能: MySQL被设计为高效、可靠和快速,特别适合处理大量数据和高并发的应用。
-
易于使用: MySQL提供了直观的命令行界面和图形用户界面工具,如MySQL Workbench,使得数据库管理变得容易。
-
灵活的存储引擎: MySQL支持多种存储引擎,如InnoDB、MyISAM、Memory等,每种引擎都有自己的特点和优化场景。
-
安全性和可靠性: 提供了强大的数据保护机制,包括网络层加密、SSL/TLS支持、访问控制和审计功能。
1.2 架构和组件
-
客户端/服务器架构: MySQL采用客户端-服务器架构,客户端通过网络向服务器发送请求,服务器处理请求并返回结果。
-
SQL解析器和优化器: SQL解析器解析SQL查询,优化器选择最有效的查询执行计划。
-
存储引擎: 存储引擎负责数据的存储和检索。InnoDB是MySQL的默认事务型存储引擎,提供了崩溃恢复和ACID兼容事务。
-
缓冲池: 缓冲池用于缓存数据和索引,提高数据处理的性能。
-
日志系统: 包括错误日志、二进制日志和慢查询日志等,用于记录数据库操作和帮助故障恢复。
1.3 应用场景
-
网站和网络应用: MySQL是构建动态网站和网络应用的首选数据库。
-
企业应用: 在企业环境中,MySQL用于数据仓库、电子商务、内容管理和日志记录等。
-
嵌入式系统: 由于其小巧灵活的特点,MySQL也适用于嵌入式系统和轻量级应用。
-
云计算和大数据: 在云环境和大数据领域,MySQL可以与其他技术结合使用,如NoSQL数据库、Hadoop和数据分析工具。
1.4 性能优化
-
索引优化: 使用索引可以显著提高查询效率。合理设计和使用索引是优化MySQL性能的关键。
-
查询调优: 分析和优化SQL查询,避免不必要的数据扫描和复杂的连接。
-
硬件优化: 通过提升硬件性能,如增加内存、使用更快的磁盘,来提高数据库的处理能力。
-
配置调整: 调整MySQL的配置参数,如调整缓冲池大小和连接数,以适应具体的应用需求。
1.5 安全性和备份
-
访问控制: MySQL提供了基于角色的访问控制机制,管理员可以精确控制用户对数据库的访问。
-
数据加密: 支持数据加密,确保敏感数据的安全。
-
备份和恢复: 定期备份数据库是保障数据安全的重要措施。MySQL提供了多种备份解决方案,包括物理备份和逻辑备份。
1.6 社区和生态
-
活跃的社区: MySQL拥有一个庞大且活跃的用户社区,提供丰富的资源和支持。
-
丰富的生态系统: 许多第三方工具和服务与MySQL集成,如监控工具、性能分析工具和图形界面管理工具。
-
教育资源: 网络上有大量的MySQL教程、指南和最佳实践,帮助新手快速上手。
2 mysql安装
2.1 mysql源安装包下载
wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
2.2 mysql源安装
yum localinstall mysql57-community-release-el7-8.noarch.rpm
2.3 检查mysql源是否安装成功
yum repolist enabled | grep "mysql.*-community.*"
2.4 mysql安装
yum install mysql-community-server
注:遇到冲突的情况,先yum remove -y mysql
2.5 mysql启动
systemctl start mysqld
2.6 mysql状态查看
systemctl status mysqld
2.7 设置mysql开机启动
systemctl enable mysqld
systemctl daemon-reload
2.8 修改root密码默认密码
mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码,然后登录mysql进行修改:
grep 'temporary password' /var/log/mysqld.log
mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
或者
mysql> set password for 'root'@'localhost'=password('password');
注意:mysql5.7默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。否则会提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements错误。
通过msyql环境变量可以查看密码策略的相关信息:
mysql> show variables like '%password%';
共有以下几种密码策略:
策略 | 检查规则 |
---|---|
0 or LOW | Length |
1 or MEDIUM | Length; numeric, lowercase/uppercase, and special characters |
2 or STRONG | Length; numeric, lowercase/uppercase, and special characters; dictionary file |
在/etc/my.cnf文件添加validate_password_policy配置,指定密码策略
# 选择0(LOW),1(MEDIUM),2(STRONG)其中一种,选择2需要提供密码字典文件
validate_password_policy=0
如果不需要密码策略,添加my.cnf文件中添加如下配置禁用即可:
validate_password = off
重新启动mysql服务使配置生效:
systemctl restart mysqld
默认只允许root帐户在本地登录,如果要在其它机器上连接mysql,必须修改root允许远程连接,或者添加一个允许远程连接的帐户,为了安全起见,我添加一个新的帐户:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'yangxin'@'%' IDENTIFIED BY 'Yangxi
2.9 配置默认编码为utf8
修改/etc/my.cnf配置文件,在[mysqld]下添加编码配置,如下所示:
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
重新启动mysql服务
默认配置文件路径:
- 配置文件:/etc/my.cnf
- 日志文件:/var/log//var/log/mysqld.log
- 服务启动脚本:/usr/lib/systemd/system/mysqld.service
- socket文件:/var/run/mysqld/mysqld.pid