MySQL 101:在Ubuntu上安装,护理和喂养和喂养

2021-06-12 04:09:08

其中一个任务几乎任何Sysadmin经常遭遇是MySQL数据库服务器的关心和送餐。你可以在所有的职业生涯中建立一个全部职业,但这一话题 - 让你成为一个DB管理员,而不是像你真正的那样谦逊的Sysadmin,但是今天,我们' Re才能覆盖基础知识。

对于本指南,我们将使用Ubuntu Linux作为底层操作系统 - 但大多数这些步骤和提示都是相同的,或者在您可能安装MySQL的几乎任何操作系统或分发时都是相同的或广泛相似的。

在一个新鲜的Ubuntu实例上安装mysql非常简单:如果需要,sudo apt更新,然后sudo apt安装mysql-server和您'重新进入比赛。下载并安装了包后,MySQL会自动触发(将在每个系统重新引导后)。

什么'不太明显的是,你如何进入一旦它的跑步就会进入小小的火虫。在这里答案 - 在Ubuntu或Debian派生的发行版上,至少在于文件/etc/mysql/debian.cn。此文件注意到自动创建MySQL SuperAdmin帐户名称和密码;该名称是Debian-sys-main,密码在安装时间内随机生成(因此,每个系统上不同)。

一旦您知道本地系统上的Debian-sys-maint的密码,您可以使用MySQL -U Debian-Sys-Maint -P登录您的新MySQL Sys-Paint -P-System将询问您的密码感谢-P你指定的标志,然后你'重复!

要离开MySQL控制台,您可以退出;随时。 (注意:输入控制台中的命令必须以分号结尾。)

您绝对不希望您的日常使用MySQL-Icions应用程序击中数据库,而不是您 - 使用Debian-sys-maint登录其控制台的Sysadmin。所以,让'快速查看创建新数据库和新用户帐户或两个管理它的过程中所涉及的过程。

要查看在MySQL实例中运行的数据库列表,请使用语句显示数据库;这非常简单,并确实是什么' d思考 - 在一个新的系统上,你' ll请参阅信息_schema,performency_schema,sys和mysql。这些数据库是"吉特"您的MySQL Server本身和大多数情况下都应该直接掩盖,好像它们是正常数据一样。

可以登录MySQL数据库的用户可以在mysql.user表中找到,可以使用mysql.user查询select *(或使用mysql;从用户选择*;如果您喜欢)。不幸的是,MySQL.uster表中有很多列 - 太多适合在没有水平文本包装的情况下适合屏幕,导致无宽容的混乱。

对于更有用的,更少的Mangled结果,尝试只选择您的列'重复在这种情况下实际感兴趣,主机和用户。现在您的命令是从用户选择主机,用户;你的结果很好看:

mysql>使用mysql;阅读表信息,用于完成表和列名称,您可以关闭此功能以获得更快的启动-a

数据库更改了MySQL>从用户选择主机,用户; + -------------- + ------------------- + |主持人|用户| + -------------- + ------------------- + | localhost | debian-sys-maving | | localhost | mysql.session | | localhost | mysql.sys | | localhost |根| + -------------- + ----------------- + 4行套装(0.00秒)

如果你真的是一个MySQL NewBie,你可能想知道主机列真的是什么。答案有点令人沮丧 - MySQL'用户帐户是用户可以从...登录的每个主机的个人帐户......意思是您可以拥有多个"用户"使用相同的用户名!

使得更加令人困惑,用户表中的每一行都有自己的密码字段 - 这意味着相同的用户名可以具有非常不同的密码和权限,具体取决于他们访问MySQL服务器的IP地址。

默认情况下,MySQL仅将其自身暴露于localhost界面 - 含义'■只有一个可能的主机访问它 - 所以这是一个默认配置的mysql实例的Moot point。但是,如果您进入商业支持(或者在您的基础架构中获得更复杂),请展开使用专用DB和应用程序服务器(例如,运行MySQL的一台服务器,以及其他正在运行Nginx或Apache的服务器) 。在这种情况下,吉姆之间的区别在网手器上的本地系统和吉姆中确实非常重要!

要添加新的用户帐户,您可以直接针对MySQL.USER表本身发出标准更新查询 - 但' S"牛仔"一般使用练习和皱眉。相反,您应该使用mysql' s grant命令,例如:

这应该是相对清晰的 - 我们创建了一个名为jim的用户,谁必须仅从localhost登录,谁的密码是非常强的密码。我们在所有数据库和表格上授予所有权限 - 那个' s *。* - 到我们的新用户。您可能认为Jim @ localhost现在有效地是一个超级管理,但没有完全满意 - 有一些相当不寻常的操作,需要真正的超级用户权限,默认情况下只有Debian-sys-mave和根有。

这将我们带到了一个潜在的严重安全问题 - root帐户根本没有在MySQL中有密码。这意味着任何可以在底层系统上成为root的人都可以在根提示符下键入mysql,并同时获取对数据库服务器的root访问权限。如果那个'不是你的东西' reful&#39' ll想要在root帐户本身上设置密码。

要更改MySQL用户帐户上的密码,我们可以使用ALTER USER命令:

创建新数据库类似地简单,创建数据库DBNAME和PRESTO,您' ve GOT了一个名为dbname的新数据库。默认情况下有特权的MySQL用户有权与新数据库一起使用,但其中'' ll希望应用程序访问它。

一个非常常见的做法是创建与数据库名称匹配的用户名,并且仅在该数据库上具有权限 - 这是您将向您的应用程序提供的帐户(例如,Web应用程序等Web应用程序)。

mysql>授予DBNAME上的所有。*' dbname' @' localhost'由&#39识别;另一个密码&#39 ;;查询OK,0行受影响,1条警告(0.00秒)

请记住 - 您刚刚创建的新帐户只能在@之后从您指定的主机名登录。如果您需要从任何主机名下工作的帐户,则可以使用MySQL通配符%:

mysql>授予DBNAME上的所有。*' dbname' @'%'由&#39识别;另一个密码&#39 ;;查询OK,0行受影响,1条警告(0.00秒)

在这种情况下,DBNAME用户帐户将能够从任何网络位置登录 - 假设网络位置当然是网络位置可以到达MySQL。您还可以以更有限的方式使用%通配符,例如' dbname' @' 192。%'是一个可以从192年开头开始的任何IP地址的帐户,例如192.168.0.100。

在早期版本的Debian和Ubuntu中,MySQL配置文件位于/etc/mysql/my.cnf。这已经改为Ubuntu 18.04及更高版本的Conf.D样式设置;旧的MySQL配置文件现在位于/etc/mysql/mysql.conf.d/mysqld.cnf处。

我们可以看到MySQL只能通过查看MySQLD.CNF中的Bind-Address Stanza,有效地限于Localhost:

jim @ locutus:/etc/mysql/mysql.conf.dh grep -b3 bind-address * mysqld.cnf-#mysqld.cnf-#而不是跳过网络默认现在只能在mysqld.cnf-#上听localhost更兼容,不太安全。 mysqld.cnf:bind-address = 127.0.0.1

如果我们想为其他机器提供MySQL服务,我们' ll需要通过覆盖另一个文件或直接编辑mysqld.cnf来更改该绑定地址。无论哪种方式,你' ll需要实际指定更广泛的绑定地址,而不是只是完全发表斯坦萨,因为MySQL本身默认在没有明确指令的情况下绑定到localhost。

如果您只希望MySQL侦听特定界面,则可以指定该接口' s ip地址 - 例如,bind-address = 192.168.0.10。但这具有一些相当讨厌的含义,从这一事实开始阻止来自localhost的连接。更常见的是,你'通过指定"假" IP 0.0.0.0:bind-address = 0.0.0.0。

使用0.0.0.0作为绑定地址(然后重新启动MySQL)将在所有可用接口上公开MySQL,包括localhost。如果是那个比你想要的更广泛的曝光,你' ll需要创建系统防火墙规则以进一步限制访问。你不应该做的是依靠用户表的主机列作为访问机制 - 它'不安全地将MySQL暴露给整个互联网,无论您的密码有多强!

如果您使用UFW,语法看起来如此:UFW允许从1.2.3.0/24到任何端口3306.这允许以1.2.3开始的任何IP地址访问MySQL服务器。或者您可能更喜欢UFW允许在eth0上进入任何端口3306,以允许在eth0中进入的任何连接(但不是在eth1或其他接口中进入任何内容)。

如果您使用iptables,语法非常相似 - 例如,iptables -a输入-p tcp --dport 3306 -s 1.2.3.0/24 -j接受 - 但您也需要知道如何,何处,当你'重新保存和加载您的Iptables规则集,这是遗憾的是,这是今天的范围。

一旦您更改了绑定地址并创建了任何必要的防火墙规则,以限制谁可以在新公开的MySQL实例上锤击,您可以使用systemd' s systemctl命令重新启动mysql:

小心从不将MySQL公开到互联网,如果您将绑定地址更改为可能将MySQL暴露给整个世界的东西,请创建(并测试!)在重新启动MySQL之前,可以防止其防止其防火墙规则如此广泛的系统防火墙规则并且实际应用更自由的绑定地址设置。