设置MySQL数据库
本文介绍如何在CentOS上执行流行的MySQL数据库服务器的基本安装。 MySQL是当今使用最广泛的数据库系统,它可以在许多不同的行业中找到,为动态网站和大型数据仓库等各种产品提供数据存储。
准备
此配方要求CentOS系统具有有效的网络连接和管理权限,使用root帐户或sudo。
怎么做
请按照以下步骤安装MySQL并创建新数据库:
- 下载Oracle维护的MySQL存储库的存储库配置包:
curl -LO dev.mysql.com/get/mysql57-community-release-el7- 7.noarch.rpm
- 安装下载的包:
yum install mysql57-community-release-el7-7.noarch.rpm
- 现在已经注册了MySQL存储库,安装mysql-community-serverpackage:
yum install mysql-community-server
- 启动MySQL服务器并使其在系统重新启动时自动启动:
systemctl start mysqld.servicesystemctl enable mysqld.service
- 在系统的防火墙中打开端口3306以允许外部连接到MySQL:
firewall-cmd --zone=public --permanent --add-service=mysqlfirewall-cmd --reload
- 从服务器的日志文件中检索MySQL的root用户的临时密码:
grep "temporary password" /var/log/mysqld.log
- 使用mysqladmin为root设置新密码。 当程序提示输入当前密码时,请输入日志中的临时密码:
mysqladmin -u root -p password
- 使用mysql使用root帐户连接到MySQL服务器:
mysql -u root -p
- 要创建新数据库,请执行CREATE DATABASE语句:
CREATE DATABASE packt;
- 执行CREATE USER语句以创建用于处理数据库的MySQL用户帐户:
CREATE USER "tboronczyk"@"localhost" IDENTIFIED BY "P@$$W0rd";
- 执行GRANT语句以为新数据库的帐户分配适当的权限:
GRANT CREATE, DROP, ALTER, LOCK TABLES, INDEX, INSERT, UPDATE, SELECT, DELETE ON packt.* TO "tboronczyk"@"localhost";
- 执行FLUSH PRIVILEGES以指示MySQL重建其权限缓存:
FLUSH PRIVILEGES;
- 退出MySQL客户端并返回终端:
exit
工作原理
我们首先下载了在我们的系统上注册Oracle维护的MySQL存储库的软件包。 MySQL是从Oracle存储库安装的,因为CentOS存储库安装了MariaDB。 经过2008年至2010年的一系列收购,MySQL代码库和商标成为Oracle的财产。 对Oracle的管理和MySQL的未来的广泛关注促使MySQL的一个原始开发人员分叉项目并启动MariaDB。 2014年,Red Hat和CentOS存储库将MySQL替换为MariaDB的默认数据库(欢迎来到开源政治领域)。
注意
MariaDB的目标是在GNU GPL许可下保持一个免费的开源项目,并成为MySQL的“增强型,替代品”。目前,两者之间的差异对于临时用户来说可以忽略不计。但在分叉替换的世界中,主要是编程接口和通信协议保持兼容。核心功能最初可能保持不变,但随着时间的推移,新功能会独立添加,并且产品的功能集开始出现分歧。 MariaDB通过版本号的跳跃来承认这一点。 MariaDB 5.1提供与MySQL 5.1相同的功能,MariaDB 5.5 for MySQL 5.5也是如此。但是,MariaDB不打算实现MySQL 5.6的所有功能,并将其版本号更改为10.0。对于那些在家中保持分数的人来说,Oracle编写的存储库在撰写本文时主持了MySQL 5.7。 CentOS存储库目前提供MariaDB 5.5。
托管软件包的服务器假定人们使用Web浏览器下载文件并发出重定向以开始下载。由于我们使用curl,因此我们提供了-L参数来跟踪重定向以到达实际的包:
curl -LO dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
接下来,我们安装了下载的包。 一旦注册了存储库,我们就可以使用mysql-community-server软件包安装MySQL。 该软件包安装服务器二进制文件,与MySQL一起使用的客户端实用程序作为依赖项安装:
yum install mysql57-community-release-el7-7.noarch.rpmyum install mysql-community-server
MySQL维护自己的用户帐户,其管理用户名为root。 就像CentOS的root用户一样,您不应该将该帐户用于常规活动; 它应该保留用于管理任务,例如创建新用户,授予权限和刷新服务器的缓存。 其他权限较低的帐户应该用于日常活动。 为了保护root帐户,我们在第一次启动MySQL服务器时随机生成密码。 我们需要搜索MySQL记录密码的日志文件,以便我们可以设置我们自己选择的新密码:
grep "temporary password" /var/log/mysqld.log
知道了临时密码,我们用mysqladmin来改变它。 -u选项提供MySQL帐户的用户名,-p提示我们输入帐户的密码,password是实用程序用于更改密码的子命令。 我们在提示输入原始密码时输入了临时密码,然后我们被要求输入并确认新密码:
mysqladmin -u root -p password
注意
root的随机默认密码是从MySQL 5.6开始的新行为,它将密码写入/root/.mysql_secret,而5.7将其写入日志文件。 在旧版本中,因此由CentOS存储库安装的MariaDB自5.5以来,密码为空。 validate_password插件也在MySQL 5.7中激活。 它要求密码为八个字符或更多,至少有一个数字,一个大写和一个小写字符,以及一个特殊字符(即标点符号)。 选择root的新密码时请考虑这些要求。
我们可以使用几个客户端连接到MySQL并与我们的数据库进行交互。 这个配方使用了mysql,因为它默认安装为依赖项。 同样,-u标识帐户的用户名,-p提示我们输入密码:
mysql -u root -p
在交互模式下运行时,客户端显示我们提交SQL语句的提示mysql>。 在每次查询之后,客户端显示服务器的响应,语句执行的时间以及服务器是否报告任何错误或警告。
我们在提示符处发出了CREATE DATABASE语句,以创建名为packt的新数据库:
CREATE DATABASE packt;
然后我们使用CREATE USER创建了一个新的用户帐户,以避免在我们的日常工作中使用root。 该帐户名为tboronczyk,允许从localhost进行身份验证:
CREATE USER "tboronczyk"@"localhost" IDENTIFIED BY "P@$$w0rd";
如果帐户将从其他系统连接到服务器,则系统的主机名或IP地址可以替换localhost。 MySQL将每个用户名和主机名对视为单独的帐户,例如tboronczyk @ localhost和tboronczyk @ 192.168.56.100是不同的帐户,可以分配不同的权限。
注意
您可以在主机名中使用通配符来创建可以从多个系统连接的帐户。 %通配符匹配零个或多个字符,因此可用于表示任何系统:
CREATE USER "tboronczyk"@"%" IDENTIFIED BY "P@$$w0rd";
创建新帐户时没有任何权限,因此我们必须通过执行GRANT语句来分配它们:
GRANT CREATE, DROP, ALTER, LOCK TABLES, INSERT, UPDATE, SELECT, DELETE ON packt.* TO "tboronczyk"@"localhost";
该语句为packt数据库中的所有表(用*表示)分配以下权限:
- CREATE: 这允许用户创建数据库和表
- DROP: 这允许用户删除整个表和数据库
- ALTER: 这允许用户更改现有表的定义
- LOCK TABLES: 这允许用户锁定表以进行独占读或写访问INDEX: This allows the user to create table indexes
- INSERT: 这允许用户将记录添加到表中
- UPDATE: 这允许用户更新表中的记录
- SELECT: 这允许用户从表中检索记录
- DELETE: 这允许用户从表中删除记录
完整的权限列表以及允许用户执行的操作可以在http://dev.mysql.com/doc/refman/5.7/en/grant.html上的官方MySQL文档中找到。
接下来,我们指示MySQL使用FLUSH PRIVILEGES重建其权限缓存:
FLUSH PRIVILEGES;
当MySQL启动时,它会将用户和权限信息缓存在内存中(您将从第5章“管理文件系统和存储”中回忆起,从内存读取比从磁盘读取要快得多),然后每次用户执行时检查缓存验证他们是否具有足够权限的操作。每当我们创建或删除用户帐户或授予或撤销帐户的权限时,我们都需要告诉MySQL更新其缓存,否则我们的更改将在MySQL下次启动时被忽视。
当使用mysql连接到MySQL时,您可能经常使用其他选项调用它。常见选项是-h,如果MySQL在不同的系统上运行,它将标识远程服务器的主机名或IP地址。 -e直接执行语句,而不是以交互方式启动mysql。此外,要使用特定数据库,可以在命令的其余部分之后给出名称,也可以使用-D来指定它。以下示例通过连接到192.168.56.100上的MySQL服务器并对其sakila数据库执行SELECT语句来演示所有这些:
mysql -u tboronczyk -p -h 192.168.56.100 -D sakila -e "SELECT last_name, first_name FROM actor"
See also
Refer to the following resources for more information on working with MySQL:
- The mysql manual page (man 1 mysql)
- MySQL 5.7 reference manual (http://dev.mysql.com/doc/refman/5.7/en)
- Jump Start MySQL (http://www.amazon.com/Jump-Start-MySQL-Timothy-Boronczyk/dp/0992461286)
- MySQL Tutorial (http://www.mysqltutorial.org/)