蚊章汇 - MySQL
type: channel
link: https://linuxcn.bwsl.wang/tag/MySQL/
items: 你应该知道的主流开源数据库
items: 在 MySQL 中处理时间
items: MySQL 字符串指南
items: 硬核观察 #655 智能手机将在三年内扼杀单反相机
items: 备忘单：提升你的 MariaDB 和 MySQL 数据库技能
items: 在 Linux 上安装 MariaDB 或 MySQL
items: 在 Linux 上检查 MySQL/MariaDB 数据库正常运行时间的三种方法
items: 怎样在 Ubuntu Linux 上安装 MySQL
items: 如何重置 MySQL 或 MariaDB 的 Root 密码
items: 不像 MySQL 的 MySQL：MySQL 文档存储介绍

你应该知道的主流开源数据库
type: item
date: 2023-11-13T17:24:00+08:00
description: 随着数据的飞速增长，数据的组织变得至关重要。本文将简要介绍当今软件开发中最流行的数据库。在软件系统中，数据被格式化地组织和存储，通过数据库可以以电子方式访问它们。因为数据已经成为一种非常重要的资产，对我们来说，掌握当今使用的各种数据库的基本知识是非常重要的。我们要看的第一个数据库是 MySQL。MySQLMySQL 官网MySQL 是使用最广泛的开源数据库管理系统之一。它由 甲骨文公司 Oracle Corporation 所有。它可以在大多数主流操作系统上运行，如 Windows、MacOS、Linux 等。MySQL 既适用于小型应用，同时也能胜任大型应用。优点适配各种操作系统适配多种编程语言，如 PHP、C、C++、Perl 等开源、免费它支持高达 8 百万 Tb 的巨大数据量可定制化比其他数据库快得多要在基于 Ubuntu 的计算机上安装并使用 MySQL，使用下面的命令：$sudo apt update $sudo apt install mysql-server $sudo systemctl start mysql.service MariaDBMariaDB 官网MariaDB 是一款由 MySQL 的开发人员开发的开源关系型数据库，因其优秀的性能和与 MySQL 良好的兼容性而广受欢迎。它是当今大多数主要云产品的一部分，对其稳定性和性能起到重要作用。最近通过使用 Galera Cluster 技术，MariaDB 新增了集群功能。另外 MariaDB 还与 Oracle 数据库有（一定的）兼容性。优点安装方便支持大数据操作高可扩展性易于导入数据要在基于 Ubuntu 的计算机上安装并使用 MariaDB，请使用以下命令:$sudo apt update $sudo apt install mariadb-server $sudo systemctl start mariadb.service RethinkDBRethinkDB 官网RethinkDB 是一个开源、免费、分布式、基于文档的 NoSQL 数据库。它由 RethinkDB 公司开发。（LCTT 译注：RethinkDB 公司已于 2016 年倒闭。RethinkDB 数据库现作为开源项目继续维护。消息来源）它可以存储具有动态模式的 JSON 文件。更重要的是，它可以将查询结果的实时更新推送给应用程序。由于它的分布式特性，它具有高度可扩展性。RethinkDB 提供了丰富的内置函数，使其成为一个高可用性的数据库。由于它是当今流行的数据库，学习如何使用它是很重要的。优点适合于 Web 应用易于扩展内置函数多，可用性高基于 JSON 动态文档要在基于 Ubuntu 的计算机上使用 RethinkDB，下面的命令会有帮助：# 添加软件仓库源 source /etc/lsb-release && echo "deb https://download.rethinkdb.com/repository/ubuntu-$DISTRIB_CODENAME $DISTRIB_CODENAME main" | sudo tee /etc/apt/sources.list.d/rethinkdb.list # 下载并安装 RethinkDB 的 GPG 密钥 $wget -qO- https://download.rethinkdb.com/repository/raw/pubkey.gpg | sudo apt-key add - $sudo apt update $sudo apt-get install rethinkdb $sudo systemctl start rethinkdb OrientDBOrientDB 官网OrientDB 是一个基于 Java 的开源 NoSQL 数据库管理系统。它支持多种数据模型，比如文档、字典、对象和图。它以图数据库的形式存储关系。下面的命令可以帮助你在 Ubuntu 机器上使用 OrientDB：$sudo apt-get update $wget -O orientdb-community-2.2.20.tar.gz http://orientdb.com/download.php?file=orientdb-community-2.2.20.tar.gz&os=linux $tar -zxvf orientdb-community-2.2.20.tar.gz $sudo mv ~/orientdb-community-2.2.20 /opt/orientdb CouchDBCouchDB 官网CouchDB 是用 Erlang 开发的开源 NoSQL 数据库。它使用多种协议和格式来传输、处理和共享数据。它使用 JSON…

在 MySQL 中处理时间
type: item
date: 2023-05-03T01:10:00+08:00
description: 这篇关于 MySQL 中日期和时间的概述将帮助你在数据库表中处理时间值。流行数据库系统 MySQL 的新老用户常常会对数据库处理时间值的方式感到困惑。有时用户不会费心去了解时间值的数据类型。这可能是因为他们觉得本身也没有什么好了解的。日期就是日期，对吧？好吧，并非总是如此。花几分钟时间了解 MySQL 如何存储和显示日期和时间是有益的。学习如何最好地利用数据库表中的时间值可以帮助你成为更好的编码者。MySQL 时间值类型当你在 MySQL 中新建表时，选择合适的数据类型（INT、FLOAT、CHAR 等）高效地保存插入到表中的数据。MySQL 为时间值提供了五种数据类型。它们是 DATE、TIME、DATETIME、TIMESTAMP 和 YEAR。MySQL 使用 ISO 8601 格式来存储以下格式的值（LCTT 译注：国际标准 ISO 8601，是国际标准化组织的日期和时间的表示方法，全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》）：DATE：YYYY-MM-DDTIME：HH:MM:SSTIMESTAMP：YYYY-MM-DD HH:MM:SSYEAR：YYYYDATETIME 与 TIMESTAMP 的比较你可能已经注意到 日期时间 DATETIME 和 时间戳 TIMESTAMP 数据类型存有相同的数据。你可能想知道这两者之间是否有差异。答案是：有。首先，可以使用的日期范围不同。DATETIME 可以保存 1000-01-01 00:00:00 和 9999-12-31 23:59:59 之间的日期，而 TIMESTAMP 的范围更有限，从 1970-01-01 00:00:01 到 2038-01-19 03:14:07 UTC。其次，虽然两种数据类型都允许你 自动初始化 auto_initialize 或 自动更新 auto_update 它们各自的值（分别用 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP），但在 5.6.5 版本之前，对 DATETIME 值不能这样操作。如果你要用 DATETIME，你可以使用 CURRENT_TIMESTAMP 的 MySQL 同义词之一，例如 NOW() 或 LOCALTIME()。如果你对一个 DATETIME 值使用 ON UPDATE CURENT_TIMESTAMP（或其同义词之一），但没有使用 DEFAULT CURRENT_TIMESTAMP 子句，那么这个列的默认值为 NULL。除非你在表的定义中包含 NOT NULL，在这种情况下，它默认为 0。另一件需要记住的重要事情是，尽管通常情况下，除非你声明一个默认值，否则 DATETIME 和 TIMESTAMP 列都没有一个默认值，但这个规则有一个例外。如果没有指定 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 这两个子句，并且禁用 explicit_defaults_for_timestamp 这个变量，那么你表中的第一个 TIMESTAMP 列将被隐式创建。要检查这个变量的状态，请运行：mysql> show variables like 'explicit_default%'; 如果你想打开或关闭它，运行这段代码（用 0 表示关闭，用 1 表示打开）：mysql> set explicit_defaults_for_timestamp = 0; TIMEMySQL 的 时间 TIME 数据类型可能看起来很简单，但有几件事是一个优秀的程序员应该牢记的。首先要注意的是，虽然 TIME 经常被认为是一天中的时间，但它实际上是经过的时间。换句话说，它可以是一个负值，或者可以大于 23:59:59。在 MySQL 中，一个 TIME 值的范围可以是 -838:59:59 到 838:59:59。另外，如果你缩写一个时间值，MySQL 会因你是否使用冒号作出不同解释。例如，10:34 这个值被 MySQL 看作是 10:34:00。也就是说，十点过后的 34 分钟。但是，如果你不使用冒号写作 1034，MySQL 将其视为 00:10:34，意思是 10 分钟 34 秒。最后，你应该知道 TIME 值（以及 DATETIME 和 TIMESTAMP 字段的时间部分）从 5.6.4 版本开始，可以取一个小数部分。要使用它，请在数据类型定义的结尾处添加一个整数（最大值为 6）的圆括号。time_column TIME(2) 时区时区变化不仅在现实世界中产生混乱和疲劳，而且也会在数据库系统中制造麻烦。地球被划分为 24 个独立的时区，通常每隔 15 度经度就会发生变化。我说通常是…

MySQL 字符串指南
type: item
date: 2023-01-12T00:14:12+08:00
description: 了解 MySQL 如何存储和显示你的字符串变量，以便你能更好地控制你的数据。字符串是你在 MySQL 中使用的最常见的数据类型之一。许多用户在他们的数据库中插入和读取字符串，而没有认真地了解过它们。本文旨在让你深入了解 MySQL 如何存储和显示你的字符串变量，以便你能更好地控制你的数据。你可以把字符串分成两类：二进制和非二进制。你可能在大多数时候想到的是非二进制字符串。非二进制字符串有字符集和排序的不同。另一方面，二进制字符串存储诸如 MP3 文件或图像等东西。即使你在二进制字符串中存储了一个词，比如“歌曲”，它的存储方式也与非二进制字符串不同。我将重点讨论非二进制字符串。MySQL 中的所有非二进制字符串都与字符集和排序相关。字符串的字符集控制哪些字符可以存储在字符串中，而它的排序方式控制当你显示字符串时如何排序。字符集要查看你系统中的字符集，请运行以下命令：SHOW CHARACTER SET; 这个命令将输出四列数据，包括字符集：名称简要描述默认的排序方式字符集中每个字符的最大尺寸MySQL 过去默认为 latin1 字符集，但自 8.0 版以来，默认为 utf8mb4。现在的默认排序方式是 utf8mb4_0900_ai_ci。ai 表示该排序对音调不敏感（ á = a），而 ci 则指定它对大小写不敏感（a = A）。不同的字符集将其字符存储在内存中不同大小的块中。例如，从上面的命令可以看出，存储在 utf8mb4 的字符被存储在 1 到 4 个字节大小的内存中。如果你想看看一个字符串是否包含多字节的字符，你可以使用 CHAR_LENGTH() 和 LENGTH() 函数。CHAR_LENGTH() 显示一个字符串包含多少个字符，而 LENGTH() 显示一个字符串有多少个字节，根据字符集的不同，它可能与一个字符串的字符长度相同，也可能不相同。下面是一个例子：SET @a = CONVERT('data' USING latin1); SELECT LENGTH(@a), CHAR_LENGTH(@a); +------------+-----------------+ | LENGTH(@a) | CHAR_LENGTH(@a) | +------------+-----------------+ | 4 | 4 | +------------+-----------------+ 这个例子表明，latin1 字符集以单字节为单位存储字符。其他字符集，如 utf16，允许多字节的字符：SET @b = CONVERT('data' USING utf16); SELECT LENGTH(@b), CHAR_LENGTH(@b); +------------+------------------+ | LENGTH(@b) | CHAR_LENGTH(@b) | +------------+------------------+ | 8 | 4 | +------------+------------------+ 排序当你运行带有 ORDER BY 子句的 SQL 语句时，字符串排序方式将决定值的显示方式。你对排序方式的选择是由你选择的字符集决定的。当你运行上面的 SHOW CHARACTER SET 命令时，你看到了每个字符集的默认排序方式。你可以很容易地看到某个特定字符集的所有排序方式。例如，如果你想查看 utf8mb4 字符集允许哪些排序，请运行：SHOW COLLATION LIKE 'utf8mb4%'; 排序方式可以是不区分大小写的，也可以是区分大小写的，或者是二进制的。让我们建立一个简单的表，向其中插入一些值，然后用不同的排序方式查看数据，看看输出结果有什么不同：CREATE TABLE sample (s CHAR(5)); INSERT INTO sample (s) VALUES ('AAAAA'), ('ccccc'), ('bbbbb'), ('BBBBB'), ('aaaaa'), ('CCCCC'); SELECT * FROM sample; +-----------+ | s | +-----------+ | AAAAA | | ccccc | | bbbbb | | BBBBB | | aaaaa | | CCCCC | +-----------+ 在不区分大小写的情况下，你的数据会按字母顺序返回，但不能保证大写的单词会排在小写的单词之前，如下图所示：SELECT * FROM sample ORDER BY s COLLATE utf8mb4_turkish_ci; +-----------+ | s | +-----------+ | AAAAA | | aaaaa | |…

硬核观察 #655 智能手机将在三年内扼杀单反相机
type: item
date: 2022-06-02T23:08:03+08:00
description: 智能手机将在三年内扼杀单反相机索尼半导体解决方案 CEO 在会议上称，手机的静止图像预计将在 2024 年超过可换镜头相机的图像质量。这包括无反光镜相机，以及现代基本上放弃的老式单反相机。智能手机摄像技术远未达到技术天花板，预计将继续其成像技术的演变，而对大多数人来说，独立的相机是多余的。索尼在全球手机图像传感器市场上占有 42% 的份额。消息来源：techradar老王点评：确实，我有多久没拿出来相机了？除了给它的电池充一下电？没想到打败相机的不是更先进的相机，却是手机。同样已经被或即将被手机消灭的设备有哪些呢？苹果称其应用商店阻止了价值 15 亿美元的欺诈交易根据苹果两年来发布的预防欺诈分析报告称，苹果在 2020 年和 2021 年各阻止了 15 亿美元的欺诈交易。并且，苹果还成功地打击了各类有问题的应用程序，它在 2020 年和 2021 年分别阻止了 100 万和 160 万个应用。苹果还因欺诈活动终止了 80 万个开发者账户，因类似理由拒绝了 15 万个账户。消息来源：9to5mac老王点评：不得不说，苹果在商店的管理上还是下了不少功夫，相对安卓商店，无论是谷歌的还是第三方的，我更信任苹果商店。360 万台 MySQL 服务器暴露于互联网上网络安全研究组织扫描发现，有近 360 万台 MySQL 服务器在使用默认的 3306 号 TCP 端口暴露在互联网上。其中 IPv4 地址约 230 万台，IPv6 地址约 130 台。按国家划分，这些可以轻松访问的 IPv4 MySQL 服务器数量如下：美国（74 万）、中国（30 万）、波兰（21 万）和德国（17 万）。而对于 IPv6 则是：美国（46 万）、荷兰（30 万）、新加坡（22 万）和德国（17 万）。不知道什么原因，没有统计到中国 IPv6 的 MySQL 服务器。消息来源：shadowserver老王点评：我只能说这些都是自找的，连最最起码安全措施都没有。

备忘单：提升你的 MariaDB 和 MySQL 数据库技能
type: item
date: 2020-11-14T18:48:00+08:00
description: 阅读本文并下载我们的免费备忘单，去使用开源的数据库吧。当你写一个程序或配置一个服务时，你最终都要持久化存储信息。有时候，你只需要一个 INI 或者 YAML 配置文件就够了。而有时候，一个自定义格式的 XML 或者 JSON 或其他类似的文件会更好。但也有时候你需要校验输入、快速查询信息、关联数据、通常还要熟练地处理你的用户的请求。这就是设计数据库的目的，而 MariaDB（由 MySQL 的原始开发人员开发的一个分支） 是一个极佳的选项。在本文中我使用的是 MariaDB，但这些信息同样适用于 MySQL。通过编程语言与数据库进行交互是很普遍的。正因如此，出现了大量 Java、Python、Lua、PHP、Ruby、C++ 和其他语言的 SQL 库。然而，在使用这些库之前，理解数据库引擎做了什么以及为什么选择数据库是重要的对我们会很有帮助。本文介绍 MariaDB 和 mysql 命令来帮助你熟悉数据库处理数据的基本原理。如果你还没有安装 MariaDB，请查阅我的文章 在 Linux 上安装 MariaDB。如果你没有使用 Linux，请参照 MariaDB 下载页面提供的指导方法。与 MariaDB 交互你可以使用 mysql 命令与 MariaDB 进行交互。首先使用子命令 ping 确认你的服务是运行着的，在提示后输入密码：$ mysqladmin -u root -p ping Enter password: mysqld is alive 为了易于读者理解，打开一个交互式的 MariaDB 会话：$ mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. [...] Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> 你现在是在一个 MariaDB 子 shell 中，提示符是 MariaDB 提示符。普通的 Bash 命令在这里不能使用，只能用 MariaDB 命令。输入 help （或 ?）查看命令列表。这些是你的 MariaDB shell 的管理命令，使用它们可以定制你的 shell，但它们不属于 SQL 语言。学习 SQL 基本知识结构化查询语言是基于它们的能力定义的：一种通过有规则且一致的语法来查询数据库中的内容以得到有用的结果的方法。SQL 看起来像是普通的英文语句，有一点点生硬。例如，如果你登入数据库服务器，想查看有哪些库，输入 SHOW DATABASES; 并回车就能看到结果。SQL 命令以分号作为结尾。如果你忘记输入分号，MariaDB 会认为你是想在下一行继续输入你的查询命令，在下一行你可以继续输入命令也可以输入分号结束命令。MariaDB [(NONE)]> SHOW DATABASES; +--------------------+ | DATABASE | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 ROWS IN SET (0.000 sec) 上面的例子显示当前有四个数据库：information_schema、mysql、performance_schema 和 test。你必须指定 MariaDB 使用哪个库，才能对该库使用查询语句。指定数据库的命令是 use。当你选择了一个库后，MariaDB 提示框会切换为选择的库。MariaDB [(NONE)]> USE test; MariaDB [(test)]> 显示数据库的表数据库里有表，与电子表格类似：有一系列的行（在数据库中称为记录）和列。一个行和一个列唯一确定一个字段。查看一个数据库中可用的表（可以理解为多表单电子表格中的一页），使用 SQL 关键字 SHOW：MariaDB [(test)]> SHOW TABLES; empty SET test 数据库是空的，所以使用 use 命令切换到 mysql 数据库：MariaDB [(test)]> USE mysql; MariaDB [(mysql)]> SHOW TABLES; +---------------------------+ | Tables_in_mysql | +---------------------------+ | column_stats | | columns_priv | | db | [..…

在 Linux 上安装 MariaDB 或 MySQL
type: item
date: 2020-10-22T22:41:56+08:00
description: 开始在 Linux 系统上使用开源的 SQL 数据库吧。MariaDB 和 MySQL 都是使用 SQL 的开源数据库，并且共享相同的初始代码库。MariaDB 是 MySQL 的替代品，你可以使用相同的命令（mysql）与 MySQL 和 MariaDB 数据库进行交互。因此，本文同时适用于 MariaDB 和 MySQL。安装 MariaDB你可以使用你的 Linux 发行版的包管理器安装 MariaDB。在大多数发行版上，MariaDB 分为服务器包和客户端包。服务器包提供了数据库“引擎”，即 MariaDB 在后台运行（通常在物理服务器上）的部分，它监听数据输入或数据输出请求。客户端包提供了 mysql 命令，你可以用它来与服务器通信。在 RHEL、Fedora、CentOS 或类似的发行版上：$ sudo dnf install mariadb mariadb-server 在 Debian、Ubuntu、Elementary 或类似的发行版上：$ sudo apt install mariadb-client mariadb-server 其他操作系统可能会以不同的打包系统封装 MariaDB，所以你可能需要搜索你的软件仓库来了解你的发行版的维护者是如何提供它的。启动 MariaDB因为 MariaDB 被设计为部分作为数据库服务器，它可以在一台计算机上运行，并从另一台计算机上进行管理。只要你能访问运行它的计算机，你就可以使用 mysql 命令来管理数据库。在写这篇文章时，我在本地计算机上运行了 MariaDB，但你同样可与远程系统上托管的 MariaDB 数据库进行交互。在启动 MariaDB 之前，你必须创建一个初始数据库。在初始化其文件结构时，你应该定义你希望 MariaDB 使用的用户。默认情况下，MariaDB 使用当前用户，但你可能希望它使用一个专用的用户帐户。你的包管理器可能为你配置了一个系统用户和组。使用 grep 查找是否有一个 mysql 组：$ grep mysql /etc/group mysql:x:27: 你也可以在 /etc/passwd 中寻找这个专门的用户，但通常情况下，有组就会有用户。如果没有专门的 mysql 用户和组，可以在 /etc/group 中寻找一个明显的替代品（比如 mariadb）。如果没有，请阅读你的发行版文档来了解 MariaDB 是如何运行的。假设你的安装使用 mysql，初始化数据库环境：$ sudo mysql_install_db --user=mysql Installing MariaDB/MySQL system tables in '/var/lib/mysql'... OK [...] 这一步的结果显示了接下来你必须执行的配置 MariaDB 的任务：PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER ! To do so, start the server, then issue the following commands: '/usr/bin/mysqladmin' -u root password 'new-password' '/usr/bin/mysqladmin' -u root -h $(hostname) password 'new-password' Alternatively you can run: '/usr/bin/mysql_secure_installation' which will also give you the option of removing the test databases and anonymous user created by default. This is strongly recommended for production servers. 使用你的发行版的初始化系统启动 MariaDB：$ sudo systemctl start mariadb 在启动时启用 MariaDB 服务器：$ sudo systemctl enable --now mariadb 现在你已经有了一个 MariaDB 服务器，为它设置一个密码：mysqladmin -u root password 'myreallysecurepassphrase' mysqladmin -u root -h $(hostname) password 'myreallysecurepassphrase' 最后，如果你打算在生产服务器上使用它，请在上线前运行 mysql_secure_installation 命令。via: https://ope…

在 Linux 上检查 MySQL/MariaDB 数据库正常运行时间的三种方法
type: item
date: 2020-05-30T05:10:38+08:00
description: 我们都知道在 Linux 中使用 uptime 命令的目的。它用于检查 Linux 系统的正常运行时间以及系统上次启动以来运行的时间。而 Linux 管理员的工作是保持系统正常运行。如果要检查 Linux 上的其他服务（例如 Apache、MySQL、MariaDB、sftp 等）运行了多长时间，该怎么做？每个服务都有自己的命令来检查服务的正常运行时间。但是你也可以为此使用其他命令。方法 1：如何使用 ps 命令在 Linux 上检查 MySQL/MariaDB 数据库的正常运行时间ps 命令的意思是 进程状态 process status 。这是最基本的命令之一，它显示了系统正在运行的进程的详细信息。为此，你首先需要使用 pidof 命令查找 MySQL/MariaDB 的 PID。# pidof mysqld | cut -d" " -f1 2412获取 MySQL/MariaDB 的 PID 后，请在 ps 命令中使用 --etime 选项获得正常运行时间。--etime：自进程启动以来经过的时间，形式为 [[DD-]hh:]mm:ss。# ps -p 2412 -o etime ELAPSED 2-08:49:30或者，在 ps 命令中使用 --lstart 选项来获取指定 PID 的正常运行时间。# ps -p 2412 -o lstart STARTED Sat May 2 03:02:15 2020MySQL/MariaDB 进程已经运行了 2 天 03 小时 02 分 15 秒。方法 2：如何使用 systemctl 命令在 Linux 上检查 MySQL/MariaDB 数据库的正常运行时间systemctl 命令用于控制 systemd 系统和服务管理器。systemd 是新的初始化系统和系统管理器，现在大多数 Linux 发行版都淘汰了传统的 SysVinit 管理器而采用了 systemd。# systemctl status mariadb 或者 # systemctl status mysql ● mariadb.service - MariaDB 10.1.44 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled) Drop-In: /etc/systemd/system/mariadb.service.d └─migrated-from-my.cnf-settings.conf Active: active (running) since Sat 2020-05-02 03:02:18 UTC; 2 days ago Docs: man:mysqld(8) https://mariadb.com/kb/en/library/systemd/ Process: 2448 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS) Process: 2388 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=/usr/bin/galera_recovery; [ $? -eq 0 ] && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS) Process: 2386 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS) Main PID: 2412 (mysqld) Status: "Taking your SQL requests now…" CGroup: /system.slice/mariadb.service └─2412 /usr/sbin/mysqld May 03 21:41:26 ns2.2daygeek.com mysqld[2412]: 2020-05-03 21:41:26 140328136861440 [Warning] Host name '1.1.1.1' could not be resolved: … not known May 04 02:00:46 ns2.2day…

怎样在 Ubuntu Linux 上安装 MySQL
type: item
date: 2019-04-28T16:48:41+08:00
description: 本教程教你如何在基于 Ubuntu 的 Linux 发行版上安装 MySQL。对于首次使用的用户，你将会学习到如何验证你的安装和第一次怎样去连接 MySQL。MySQL 是一个典型的数据库管理系统。它被用于许多技术栈中，包括流行的 LAMP) （Linux、Apache、MySQL、PHP）技术栈。它已经被证实了其稳定性。另一个让 MySQL 受欢迎的原因是它是开源的。MySQL 是关系型数据库（基本上是表格数据）。以这种方式它很容易去存储、组织和访问数据。它使用SQL（结构化查询语言）来管理数据。这这篇文章中，我将向你展示如何在 Ubuntu 18.04 安装和使用 MySQL 8.0。让我们一起来看看吧！在 Ubuntu 上安装 MySQL我将会介绍两种在 Ubuntu 18.04 上安装 MySQL 的方法：从 Ubuntu 仓库上安装 MySQL。非常简单，但不是最新版（5.7）从官方仓库安装 MySQL。你将额外增加一些步处理过程，但不用担心。你将会拥有最新版的MySQL（8.0）有必要的时候，我将会提供屏幕截图去引导你。但这篇文章中的大部分步骤，我将直接在终端（默认热键： CTRL+ALT+T）输入命令。别害怕！方法 1、从 Ubuntu 仓库安装 MySQL首先，输入下列命令确保你的仓库已经被更新：sudo apt update现在，安装 MySQL 5.7，简单输入下列命令：sudo apt install mysql-server -y就是这样！简单且高效。方法 2、使用官方仓库安装 MySQL虽然这个方法多了一些步骤，但我将逐一介绍，并尝试写下清晰的笔记。首先浏览 MySQL 官方网站的下载页面。在这里，选择 DEB 软件包，点击“Download”链接。滑到有关于 Oracle 网站信息的底部，右键 “No thanks, just start my download.”，然后选择 “Copy link location”。现在回到终端，我们将使用 Curl 命令去下载这个软件包：curl -OL https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.debhttps://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb 是我刚刚从网页上复制的链接。根据当前的 MySQL 版本，它有可能不同。让我们使用 dpkg 去开始安装 MySQL：sudo dpkg -i mysql-apt-config*更新你的仓库：sudo apt update要实际安装 MySQL，我们将使用像第一个方法中同样的命令来安装：sudo apt install mysql-server -y这样做会在你的终端中打开包配置的提示。使用向下箭头选择“Ok”选项。点击回车。这应该会提示你输入密码：这是在为 MySQL 设置 root 密码。不要与 Ubuntu 的 root 密码混淆。输入密码然后点击 Tab 键去选择“Ok“。点击回车键，你将重新输入密码。操作完之后，再次键入 Tab 去选择 “Ok”。按下回车键。将会展示一些关于 MySQL Server 的配置信息。再次按下 Tab 去选择 “Ok” 和按下回车键：这里你需要去选择默认验证插件。确保选择了“Use Strong Password Encryption”。按下 Tab 键和回车键。就是这样！你已经成功地安装了 MySQL。验证你的 MySQL 安装要验证 MySQL 已经正确安装，使用下列命令：sudo systemctl status mysql.service这将展示一些关于 MySQL 服务的信息：你应该在那里看到 “Active: active (running)”。如果你没有看到，使用下列命令去开始这个服务：sudo systemctl start mysql.service配置/保护 MySQL对于刚安装的 MySQL，你应该运行它提供的安全相关的更新命令。就是：sudo mysql_secure_installation这样做首先会询问你是否想使用 “ 密码有效强度 validate password component ”。如果你想使用它，你将必须选择一个最小密码强度（0 – 低，1 – 中，2 – 高）。你将无法输入任何不遵守所选规则的密码。如果你没有使用强密码的习惯（本应该使用），这可能会配上用场。如果你认为它可能有帮助，那你就键入 y 或者 Y，按下回车键，然后为你的密码选择一个强度等级和输入一个你想使用的密码。如果成功，你将继续强化过程；否则你将重新输入一个密码。但是，如果你不想要此功能（我不会），只需按回车或任何其他键即可跳过使用…

如何重置 MySQL 或 MariaDB 的 Root 密码
type: item
date: 2018-09-08T16:48:08+08:00
description: 几个月前，我在Ubuntu 18.04 上安装了 LAMP。今天，我尝试以 root 用户身份登录数据库，但我完全忘记了密码。经过一阵 Google 搜索并浏览一些文章后，我成功重置了密码。对于那些想知道如何做到这一点的人，这个简短的教程解释了如何在类 Unix 操作系统中重置 MySQL 或 MariaDB Root 密码。重置 MySQL 或 MariaDB Root 密码首先，停止数据库。如果你使用 MySQL，请输入以下命令并下按回车键。$ sudo systemctl stop mysql对于 MariaDB：$ sudo systemctl stop mariadb接下来，使用以下命令在没有权限检查的情况下重新启动数据库：$ sudo mysqld_safe --skip-grant-tables &这里， --skip-grant-tables 选项让你在没有密码和所有权限的情况下进行连接。如果使用此选项启动服务器，它还会启用 --skip-networking 选项，这用于防止其他客户端连接到数据库服务器。并且，& 符号用于在后台运行命令，因此你可以在以下步骤中输入其他命令。请注意，上述命令很危险，并且你的数据库会变得不安全。你应该只在短时间内运行此命令以重置密码。接下来，以 root 用户身份登录 MySQL/MariaDB 服务器：$ mysql在 mysql > 或 MariaDB [(none)] > 提示符下，运行以下命令重置 root 用户密码：UPDATE mysql.user SET Password=PASSWORD('NEW-PASSWORD') WHERE User='root';使用你自己的密码替换上述命令中的 NEW-PASSWORD。然后，输入以下命令退出 mysql 控制台。FLUSH PRIVILEGES; exit最后，关闭之前使用 --skip-grant-tables 选项运行的数据库。为此，运行：$ sudo mysqladmin -u root -p shutdown系统将要求你输入在上一步中设置的 MySQL/MariaDB 用户密码。现在，使用以下命令正常启动 MySQL/MariaDB 服务：$ sudo systemctl start mysql对于 MariaDB：$ sudo systemctl start mariadb使用以下命令验证密码是否确实已更改：$ mysql -u root -p今天就是这些了。还有更多好东西。敬请期待！干杯!via: https://www.ostechnix.com/how-to-reset-mysql-or-mariadb-root-password/作者：SK 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

不像 MySQL 的 MySQL：MySQL 文档存储介绍
type: item
date: 2018-06-24T17:19:00+08:00
description: MySQL 文档存储 可以跳过底层数据结构创建、数据规范化和其它使用传统数据库时需要做的工作，直接存储数据。MySQL 可以提供 NoSQL JSON 文档存储 Document Store 了，这样开发者保存数据前无需 规范化 normalize 数据、创建数据库，也无需在开发之前就制定好数据样式。从 MySQL 5.7 版本和 MySQL 8.0 版本开始，开发者可以在表的一列中存储 JSON 文档。由于引入 X DevAPI，你可以从你的代码中移除令人不爽的结构化查询字符串，改为使用支持现代编程设计的 API 调用。系统学习过结构化查询语言（SQL）、 关系理论 relational theory 、 集合 set 和其它关系数据库底层理论的开发者并不多，但他们需要一个安全可靠的数据存储。如果数据库管理人员不足，事情很快就会变得一团糟，MySQL 文档存储 允许开发者跳过底层数据结构创建、数据规范化和其它使用传统数据库时需要做的工作，直接存储数据。只需创建一个 JSON 文档集合 document collection ，接着就可以使用了。JSON 数据类型所有这一切都基于多年前 MySQL 5.7 引入的 JSON 数据类型。它允许在表的一行中提供大约 1GB 大小的列。数据必须是有效的 JSON，否则服务器会报错；但开发者可以自由使用这些空间。X DevAPI旧的 MySQL 协议已经历经差不多四分之一个世纪，已经显现出疲态，因此新的协议被开发出来，协议名为 X DevAPI。协议引入高级会话概念，允许代码从单台服务器扩展到多台，使用符合 通用主机编程语言样式 common host-language programming patterns 的非阻塞异步 I/O。需要关注的是如何遵循现代实践和编码风格，同时使用 CRUD （Create、 Read、 Update、 Delete）样式。换句话说，你不再需要在你精美、纯洁的代码中嵌入丑陋的 SQL 语句字符串。一个新的 shell 支持这种新协议，即所谓的 MySQL Shell。该 shell 可用于设置 高可用集群 high-availability cluster 、检查服务器 升级就绪状态 upgrade readiness 以及与 MySQL 服务器交互。支持的交互方式有以下三种：JavaScript，Python 和 SQL。代码示例下面的代码示例基于 JavaScript 方式使用 MySQL Shell，可以从 JS> 提示符看出。下面，我们将使用用户 dstokes 、密码 password 登录本地系统上的 demo 库。db 是一个指针，指向 demo 库。$ mysqlsh dstokes:password@localhost/demo JS> db.createCollection("example") JS> db.example.add( { Name: "Dave", State: "Texas", foo : "bar" } ) JS> 在上面的示例中，我们登录服务器，连接到 demo 库，创建了一个名为 example 的集合，最后插入一条记录；整个过程无需创建表，也无需使用 SQL。只要你能想象的到，你可以使用甚至滥用这些数据。这不是一种代码对象与关系语句之间的映射器，因为并没有将代码映射为 SQL；新协议直接与服务器层打交道。Node.js 支持新 shell 看起来挺不错，你可以用其完成很多工作；但你可能更希望使用你选用的编程语言。下面的例子使用 world_x 示例数据库，搜索 _id 字段匹配 CAN. 的记录。我们指定数据库中的特定集合，使用特定参数调用 find 命令。同样地，操作也不涉及 SQL。var mysqlx = require('@mysql/xdevapi'); mysqlx.getSession({ //Auth to server host: 'localhost', port: '33060', dbUser: 'root', dbPassword: 'password' }).then(function (session) { // use world_x.country.info var schema = session.getSchema('world_x'); var collection = schema.getCollection('countryinfo'); collection // Get row for 'CAN' .find("$._id == 'CAN'") .limit(1) .execute(doc => console.log(doc)) .then(() => c…