其中一个任务几乎任何Sysadmin经常遭遇是MySQL数据库服务器的关心和送餐。您可以在任何内容中建立一个整个职业,但这一主题 - 使您成为一个DB管理员,而不是像你真正的那样谦逊的Sysadmin,但对于今天来说,我们只是为了涵盖基础知识。
在本指南中,我们将使用Ubuntu Linux作为底层操作系统——但是最多在这些步骤和提示中,您可以在几乎任何操作系统或分发时都是相同的或广泛相似的,您可以安装MySQL。
安装MySQL
在一个新的Ubuntu实例上安装MySQL非常简单:sudo apt更新
如果有必要,然后安装mysql-server
而你就去了比赛。下载并安装包后,mysql
自动触发(将在每个系统重新启动后)触发。
什么是明显的就是你的方式成一旦它开始运转。答案在这里——至少在Ubuntu或debian派生的发行版上——就在文件中/etc/mysql/debian.cnf.
.这个文件记录了自动创建的mysql超级管理员帐户名和密码;名字是Debian-sys-maving
,密码是在安装时随机生成的(因此,在每个系统上是不同的)。
一旦您了解密码Debian-sys-maving
在您的本地系统上,您可以登录到您的新MySQL服务器Mysql -u debian-sys-maint -p
-系统会问你密码,谢谢- p
你指定的标志,然后你在!
要离开MySQL控制台,您只能出口;
在任何时间。(注意:输入控制台的命令必须以分号结尾。)
创建数据库和用户
您绝对不希望您的日常使用MySQL-Icions应用程序击中数据库,而不是您 - 使用-Sysadmin登录其控制台使用Debian-sys-maving
.因此,让我们快速查看创建新数据库和新用户帐户或两个以管理它的过程所涉及的过程。
要查看MySQL实例中运行的数据库列表,请使用该语句显示数据库;
.这非常简单,并确实是你想到的新系统,你会看到Information_Schema.
,performance_schema.
,SYS.
,mysql
.这些数据库是MySQL服务器本身的“内脏”,在大多数情况下不应该像处理普通数据那样直接摆弄它们。
可以登录MySQL数据库的用户可以在其中找到mysql.user
表格,可以询问从mysql.user中选择*
(或使用mysql;从用户选择*;
如果你喜欢)。不幸的是,有很多列在mysql.user
表格 - 在没有水平文本包装的情况下适合屏幕的太多,导致无泥落。
要想获得更有用、更少混乱的结果,不妨尝试一下选择
只需列在此案例中,您实际上是兴趣的,宿主
和用户
.现在你的命令是从用户中选择主机、用户
你的结果很好看:
mysql >使用mysql;
读取表信息以完成表和列名
你可以关闭这个功能来快速启动-A
数据库已更改
MySQL>选择主机,用户来自用户;
+---------------+------------------+
|主机|用户|
+---------------+------------------+
| localhost | debian-sys-maint |
| localhost | mysql。会话|
| localhost | mysql。SYS.|
| localhost | root |
+---------------+------------------+
4行设置(0.00秒)
如果你真的是一个MySQL新手,你可能想知道什么宿主
专栏是关于。答案有点令人沮丧——mysql的用户帐户是独立的每个主机,用户可能从……这意味着你可以有多个“用户”与相同的用户名!
更让人困惑的是,每一行用户
表有自己的密码
字段 - 意味着同一用户名称根据他们访问MySQL服务器的IP地址,可以有不同的密码和特权。
默认情况下,MySQL只向localhost.
界面 - 含义只有一个可能的主机可以访问它 - 因此它是默认配置的mysql实例上的moot point。但是,如果您进入商业支持(或决定在您自己的基础架构中获得更复杂),则您将遇到具有专用DB和应用程序服务器的基础架构(例如,运行MySQL的一台服务器,以及另一个运行Nginx或Apache)。在这种情况下,区别吉姆
在当地系统和吉姆
在webserver上确实变得非常重要!
要添加一个新的用户帐户,可以直接发布一个标准更新
查询mysql.user
表本身 - 但这是一个“牛仔”在一般使用中练习和皱眉。相反,你应该使用mysql授予
命令,例如:
Mysql > grant all on *。* to 'jim'@'localhost' identified by 'very strong-password ';
这应该是相对清楚的——我们创建了一个名为的用户吉姆
,必须从那里登录localhost.
仅限,谁的密码是very-strong-password
.我们授予所有
对所有数据库和表的权限*。*
- 我们的新用户。你可能会想吉姆@ localhost.
现在是一个有效的超级管理员,但情况并非如此——有一些相当不寻常的操作需要真正的超级用户权限,默认情况下Debian-sys-maving
和根
有。
这给我们带来了一个潜在的严重的安全问题根
帐户根本没有MySQL中的密码。这意味着任何可以成为的人根
在底层系统中可以简单地输入mysql
在根提示符并生动到数据库服务器的root访问权限。如果那不是你对的东西,你会想要设置密码根
账户本身。
要更改MySQL用户帐户的密码,我们可以使用改变用户
命令:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'super-strong-password';
查询OK, 0行受影响(0.00秒)
创建新数据库类似地简单,创建数据库dbname.
和presto,你有一个名为的新数据库dbname
.有权限的MySQL用户*。*
将默认情况下与新数据库一起使用权限,但这不是您希望应用程序访问它的方法。
一个非常常见的做法是创建与数据库名称匹配的用户名,并且仅在该数据库上具有权限 - 这是您将向您的应用程序提供的帐户(例如,Web应用程序等Web应用程序)。
mysql>授予dbname上的全部。*以“另一个密码”标识的'dbname'@'localhost';
查询OK, 0行受影响,1个警告(0.00秒)
请记住——您刚刚创建的新帐户只能从您在@
.如果你需要从账户工作任何主机名,可以使用MySQL通配符%
:
mysql>授予dbname上的所有。*到'另一个密码'标识的'dbname'@'%';
查询OK, 0行受影响,1个警告(0.00秒)
在这种情况下dbname
用户帐户将能够登录任何网络位置—当然,假设网络位置可以到达MySQL。也可以使用%
例如,以更有限的方式使用通配符'dbname'@'192.%'
是一个可以从任何IP地址登录的帐户192.
例如,192.168.0.100
.
将mysql暴露给其他机器
在早期版本的Debian和Ubuntu中,MySQL配置文件位于/etc/mysql/my.cnf.
.这改变为Conf.D.
Ubuntu 18.04及更高版本的样式设置;旧的MySQL配置文件位于/etc/mysql/mysql.conf.d / mysqld.cnf
现在。
我们可以看到MySQL将有效地限于localhost.
只靠看bind-address
节在mysqld.cnf
:
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服务,我们需要改变这一点bind-address
-通过重写另一个文件或通过编辑mysqld.cnf
直接。不管怎样,你都需要指定更广泛的bind-address
由于MySQL本身将默认为绑定,而不是完全评论斯坦扎localhost.
没有明确的指示。
如果您只希望MySQL侦听特定接口,则可以指定该接口的IP地址 - 例如,bind-address = 192.168.0.10
.但这有一些相当恶劣的暗示,从这个事实开始堵塞与...的连接localhost.
.更常见的是,您将通过指定“假”IP 0.0.0.0来完全nerf:Bind-Address = 0.0.0.0
.
使用0.0.0.0.
作为你的bind-address
(然后重新启动MySQL)将暴露MySQL所有可用接口,包括localhost。如果这是比您想要的更广泛的曝光,您需要创建系统防火墙规则以进一步限制访问权限。你应该是什么不是做的是依靠吗宿主
列的用户
表作为访问机制—将MySQL暴露给整个Internet是不安全的,无论您的密码有多强!
如果您正在使用查维斯
,语法是这样的: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
规则集,很不幸这超出了我们今天的范围。
一旦你改变了bind-address
和创建任何必要的防火墙规则来限制谁可以敲打你新公开的MySQL实例,你可以使用systemd's重启MySQLsystemctl.
命令:
jim @ locutus:〜$ sudo systemctl重新启动mysql
小心从来没有将MySQL公开到互联网,如果你改变你的话bind-address
创建(并测试!)系统防火墙规则,防止它变得如此宽泛前重新启动MySQL,并实际应用更自由bind-address
设置。
120年读者评论
如果您知道MySQL在ZFS上,也可以进行一些简单的优化,尽管这肯定是它将超出本文的范围。
我期待看到更多这样的东西!
因为大多数情况下,MySQL仍然有更好的名称识别。
从字面上看,唯一的改变是“apt install mysql-server”变成了“apt install mariadb-server”。每个命令名、每个参数语法、所有其他内容(在这个简单的教程中)都没有改变。
另外,就像我不喜欢Oracle ...... IMO(以及我的惊喜),自收购以来,他们对MySQL非常好的管家。
最后编辑吉姆盐兵2021年6月11日周五下午6:09
如果您知道MySQL在ZFS上,也可以进行一些简单的优化,尽管这肯定是它将超出本文的范围。
我期待看到更多这样的东西!
我们可能晚一点到那里。但是,尽管我非常喜欢ZFS,但我不能总是在需要数据库的地方使用它,您也不能。
(即使你依靠ZFS MySQL二进制文件的复制,并且不介意影响潜在的启动时间长,由于期刊复苏InnoDB表上如果你把快照在一个尴尬的时间,而不需要担心MyISAM不是崩溃一致,和其他一些东西除了…你仍然需要知道这首曲子的所有内容。)
因为大多数情况下,MySQL仍然有更好的名称识别。
从字面上看,唯一的改变是“apt install mysql-server”变成了“apt install mariadb-server”。每个命令名、每个参数语法、所有其他内容(在这个简单的教程中)都没有改变。
此外,尽管我不喜欢甲骨文……IMO(让我非常惊讶的是)自从MySQL被收购以来,他们已经成为了相当好的MySQL标准。
为什么是MySQL而不是PostgreSQL呢?
回来后,当我仍然为数据分析做一些SQL时,我发现了MySQL Maddening的特质和局限性。
如果可以自由选择建立一个新的sql服务器,有什么理由选择MySQL而不是PostgreSQL?
最后编辑oulenz上午9点2:45:下午2:45
请不要ibdata1文件-
请不要in ibdata1文件?
这个问题问得好:但是只要你上网搜索一下,就能找到一些关于这个话题的好文章。
请不要ibdata1文件-
请不要in ibdata1文件?
不。
我们可以得到更多这种东西吗?类似于纽伯管理员和保安人员的一些普通企业工具的基本管理中的备忘单或崩溃课程?就像这篇文章一样短,甜蜜的东西。而不是不得不坐下来读一本电话尺寸技术手册,这些手册覆盖着许多不捕获的领域,这些领域不受专门在特定领域的情况下?或者必须在您只需要知道如何操作少数基本功能时观看教程的时间?
我知道这不是一个入门网站,但如果我能在浏览新闻的同时快速学到一些相关知识,这对我来说是一个胜利。
谢谢你写这篇文章,但我忍不住想知道。
为什么不通过Docker做到这一点?
不可否认,我问这个是因为我花了每个工作时间/分钟/秒
埋藏在用K8S和Docker做所有这些东西的美妙世界,
所以也许我不是正确的受众。
但是通过docker做这件事确实提供了拉出容器映像和
有一致的部署。
ymmv.
好吧,这应该是,我认为,最简单的介绍。也许吉姆可以/将来会继续进入集装箱化。容器很酷,但也有点复杂。您开始进入必须配置时的问题。MySQL使用在容器外部的存储。您可以在计算机内部具有虚拟私有LAN的并发症,每个容器都具有自己的IP地址。然后,您必须允许通过容器引擎(Docker或其他)连接到容器。
当然不是不可能在一篇文章中涵盖-不是那么复杂。但是比直接在操作系统上运行单个实例稍微复杂一些。
当Oracle购买MySQL时有点有关。MySQL如此占据主导地位,难以忽视。
同意了。MariaDB是一个性能更好的数据库,开始时没有增加太多复杂性。
更不用说甲骨文。
注意:从MySQL 5.7开始(在默认的发行版;有些Linux发行版会改变这个),默认情况下你需要发出
之前你可以
在过去,如果用户不存在,GRANT命令会自动创建用户。出于安全原因更改了这一点:如果您将权限授予一个不存在的用户(或者授予一个不存在的主机上的现有用户!),则该用户将被静默创建没有密码!
例子:
授予*上的所有权限。*到jim@192.168.0.1;
——result: Jim从192.168.0.1连接不需要密码!
看到 https://dev.mysql.com/doc/refman/5.7/en…reate_user 想要查询更多的信息。
MySQL Shell文档在这里: https://dev.mysql.com/doc/mysql-shell/8…chema.html
最后编辑keithlammers在星期五6月11日,2021 6:48下午
因为大多数情况下,MySQL仍然有更好的名称识别。
从字面上看,唯一的改变是“apt install mysql-server”变成了“apt install mariadb-server”。每个命令名、每个参数语法、所有其他内容(在这个简单的教程中)都没有改变。
此外,尽管我不喜欢甲骨文……IMO(让我非常惊讶的是)自从MySQL被收购以来,他们已经成为了相当好的MySQL标准。
当然,也许通常是更好的名称识别......但是你不能用它作为一种让人注意玛丽亚达的机会吗?特别是因为Afaik,即使在这一点上,几乎所有相同的配置/设置/技能都在两者之间是非常便携的。
至于Postgres,我之所以做出这样的改变,是因为我想要整合到一个具有更好JSON支持和其他一流生态系统的平台上。然而,我仍然怀念MySQL提供的不同表/索引系统的灵活性。(MyISAM, InnoDB, Black hole等)我主观地认为MySQL仍然是更好的全能平台。
再次,真的很好的惊喜,有一种善意的文章。谢谢。
因为大多数情况下,MySQL仍然有更好的名称识别。
从字面上看,唯一的改变是“apt install mysql-server”变成了“apt install mariadb-server”。每个命令名、每个参数语法、所有其他内容(在这个简单的教程中)都没有改变。
此外,尽管我不喜欢甲骨文……IMO(让我非常惊讶的是)自从MySQL被收购以来,他们已经成为了相当好的MySQL标准。
如果可以自由选择建立一个新的sql服务器,有什么理由选择MySQL而不是PostgreSQL?
1. MySQL托管通常是更便宜的方式。
2. .NET驱动程序支持PSQL是一个IFFY。
如果您知道MySQL在ZFS上,也可以进行一些简单的优化,尽管这肯定是它将超出本文的范围。
我期待看到更多这样的东西!
我们可能晚一点到那里。但是,尽管我非常喜欢ZFS,但我不能总是在需要数据库的地方使用它,您也不能。
如果您担心ZFS许可证与GPL不兼容,则可以避免GPL。FreeBSD的许可证兼容。
即使我今天在数据库下没有ZFS,即使我可以确定我将它作为下一个重大升级的一部分。
加上,FreeBSD有快照还有复制(我一时想不起来了)工具,所以你不用自己动手。我真的很喜欢祖父/父亲/儿子备份策略对于数据库。
随着PostgreSQL的投票,“ZFS快照&& ZFS发送”是一种更有效的方法来站起来的PostgreSQL复制,以及场外热备份。
如果您实际上需要关系,酸数据库,请使用PostgreSQL。如果您没有,如果最适合您的用例最适合的No-SQL选项,请使用一个。
朋友不要让朋友使用mysql。
谢谢你写这篇文章,但我忍不住想知道。
为什么不通过Docker做到这一点?
不可否认,我问这个是因为我花了每个工作时间/分钟/秒
埋藏在用K8S和Docker做所有这些东西的美妙世界,
所以也许我不是正确的受众。
但是通过docker做这件事确实提供了拉出容器映像和
有一致的部署。
ymmv.
好吧,这应该是,我认为,最简单的介绍。也许吉姆可以/将来会继续进入集装箱化。容器很酷,但也有点复杂。您开始进入必须配置时的问题。MySQL使用在容器外部的存储。您可以在计算机内部具有虚拟私有LAN的并发症,每个容器都具有自己的IP地址。然后,您必须允许通过容器引擎(Docker或其他)连接到容器。
当然不是不可能在一篇文章中涵盖-不是那么复杂。但是比直接在操作系统上运行单个实例稍微复杂一些。
很公平。
我确实对集装箱正面有偏见,因为我
我不记得上一次在裸操作系统上安装任何东西是什么时候了。
工作流程是99.9%的“启动实例,安装docker,
开始把图片”
有了容器侧的过程限制支持,它
还增加了一点额外的安全性,就像你说的,最后
进出容器的一些额外的开销。
但要清楚的是,每次出现这样的文章,
我提醒我们所有人的幸运
你的写作水平。
我希望你能重做一些旧的。如果我没记错的话,Ars有一个NAS的3部分指南。
因为大多数情况下,MySQL仍然有更好的名称识别。
从字面上看,唯一的改变是“apt install mysql-server”变成了“apt install mariadb-server”。每个命令名、每个参数语法、所有其他内容(在这个简单的教程中)都没有改变。
此外,尽管我不喜欢甲骨文……在我看来(让我非常惊讶的是),他们的表现相当不错标准自收购以来MySQL。
我觉得你的意思是管家这里?
因为大多数情况下,MySQL仍然有更好的名称识别。
从字面上看,唯一的改变是“apt install mysql-server”变成了“apt install mariadb-server”。每个命令名、每个参数语法、所有其他内容(在这个简单的教程中)都没有改变。
此外,尽管我不喜欢甲骨文……IMO(让我非常惊讶的是)自从MySQL被收购以来,他们已经成为了相当好的MySQL标准。
为什么是MySQL而不是PostgreSQL呢?
回来后,当我仍然为数据分析做一些SQL时,我发现了MySQL Maddening的特质和局限性。
如果可以自由选择建立一个新的sql服务器,有什么理由选择MySQL而不是PostgreSQL?
有一些软件包,需要它作为后端。IIRC,几个网络论坛包需要它,我认为包括一个ARS在这里运行。
根据我的理解,部分原因是MySQL/MariaDB在新的数据库连接上非常快,所以打开套接字,发送查询,获得结果,然后再次关闭套接字很简单。它在这方面非常快速,对论坛非常友好,因为在为用户构建显示页面时,这通常涉及许多简短的查找。
大多数其他数据库需要一些时间来在新的查询套接字上设置。例如,Oracle疯狂地慢了起来,需要年龄促进一个新的连接,到我最后工作的时候,连接集中器软件都是愤怒......它将保持一系列连接池Oracle,然后提供一些漂亮的快速查询套接字,可以很快响应,将传入请求转发到它保持打开的长期连接。
我的意思是,从根本上说,需要这种软件是非常愚蠢的,甲骨文不应该那么迟钝,但这是我上次处理它的时候,这就是为什么你需要连接池软件如果你想要快速回复。
让现有的软件适应一个新的数据库可能有点痛苦,对于MySQL来说尤其如此,它在默认情况下做了很多错误的事情,或者至少它做了。早期开发的一切都是关于速度,而正确性并不是他们优先考虑的事情,所以它会做各种愚蠢的事情。但是很多软件都是围绕着这些奇怪的东西设计的,对于这些团队来说,使用通用的数据库引擎并不值得。
PostgreSQL,很长一段时间非常慢。他们写的代码首先得到正确的东西。数据完整性是他们的工作。然后,后来,他们弄清楚了如何让它快速变得快速。它在大多数事情上比MySQL快速或更快,它具有极其有弹性的底层引擎。
MySQL从速度开始,从来一直试图增加正确的结果。Postgres后来开始正确,增加速度,结果出色。我建议它作为新用户的默认数据库软件。
除非你知道你需要别的东西,否则就从那里开始。如果由于某些原因,它最终不能满足您的需求,并且您以后必须迁移到其他的东西,那么您可以非常确定您的数据将完好无损,并且能够完整地导出所有内容。默认情况下是正确的,MySQL必须被引导到那里。
最后编辑勒2021年6月11日星期五下午3:53
因为大多数情况下,MySQL仍然有更好的名称识别。
从字面上看,唯一的改变是“apt install mysql-server”变成了“apt install mariadb-server”。每个命令名、每个参数语法、所有其他内容(在这个简单的教程中)都没有改变。
此外,尽管我不喜欢甲骨文……IMO(让我非常惊讶的是)自从MySQL被收购以来,他们已经成为了相当好的MySQL标准。
如果可以自由选择建立一个新的sql服务器,有什么理由选择MySQL而不是PostgreSQL?
1. MySQL托管通常是更便宜的方式。
2. .NET驱动程序支持PSQL是一个IFFY。
所以,这很有意思。为什么postgres会更贵?我猜答案归结为“MySQL的提供者更多的方式”。
蟑螂通过复制和分区使弹性完全不可见。只需要在集群前放置一个负载平衡器就可以了。它在Docker中工作得很好,在NFS上持久化没有问题。
在可预见的将来,我将始终使用基于服务器的SQL的蟑螂。
这是一款令人印象深刻的软件。
我希望它像涌入一样单一的二进制文件,但这只是我贪婪。
没有关联,除了成为他们开源提供的非常幸福的用户。
“对MySQL.USER表的更新查询”
mysqldumpostfixadminp -u debian-sys-maint -p password -h localhost --all-databases> /home/jim/mysqlbackup.mysql
你可以使用:
mysqldump --defaults-extra-file = / etc / mysql / debian.cnf --all-databases> /path/to/mysqlbackup.mysql
这避免了将密码写入进程表,因此它对'ps'输出是不可见的。
同样地, ...
Mysql——defaults-extra-file=/etc/ Mysql /debian.cnf
允许您登录(假设您是root)无需输入密码等。
或者,创建一个~/.my.cnf文件,如下所示:
[客户]
主机=为1.2.3.4
数据库=一些数据库
用户= myuser.
密码= mypass
默认情况下将使用....
你必须登录或者创建一个帐户置评。