生命在于编程

生命不息,编程不止

0%

如何在Ubuntu 20.04上重置MySQL或MariaDB根密码

原文:https://www.digitalocean.com/community/tutorials/how-to-reset-your-mysql-or-mariadb-root-password-on-ubuntu-20-04

编者按:遇到这个问题后,试了很多种方法,这篇文章介绍的最为详细也最为全面,按照这个方法可以完美解决。

下面内容基本上是谷歌翻译过来。

介绍

忘记数据库密码了吗?它发生在我们最好的人身上。如果您忘记或丢失了MySQL或MariaDB数据库的root密码,但如果您有权访问服务器和具有sudo特权的用户帐户,则仍然可以访问并重置密码。

本教程演示了如何为在Ubuntu 20.04上通过软件包管理器安装的MySQL和MariaDB数据库重置密码apt。根密码的更改过程会有所不同,具体取决于您是否安装了MySQL或MariaDB以及发行版或其他供应商提供的软件包附带的默认systemd配置。尽管本教程中的说明可能适用于其他系统或数据库服务器版本,但它们已通过Ubuntu 20.04和发行版提供的软件包进行了测试。

注意:在全新的Ubuntu 20.04安装中,默认的MySQL或MariaDB配置通常允许您访问数据库(具有完整的管理特权),而无需提供密码,只要您从系统的帐户进行连接即可。在这种情况下,可能不必重置密码。在继续重置数据库密码之前,请尝试使用sudo mysql命令访问数据库。仅当更改了身份验证的默认配置,并且这导致访问被拒绝错误时,请按照本教程中的步骤进行操作。

先决条件

要恢复您的MySQL或MariaDB密码,您将需要:

注意:两种数据库安装指南都保留了数据库帐户的默认配置,只要您可以访问系统的帐户,就不需要密码来进行身份验证。您仍然可以按照本指南设置和验证新密码。

步骤1 —识别数据库版本并停止服务器

Ubuntu 20.04可运行MySQL或MariaDB(一种流行的直接替代产品,与MySQL完全兼容)。您将需要使用不同的命令来恢复root密码,具体取决于已安装的命令,因此请按照本节中的步骤确定正在运行的数据库服务器。

使用以下命令检查您的版本:

1
mysql --version

如果您正在运行MariaDB,则会在输出中看到“ MariaDB”和版本号:

MariaDB output

1
mysql  Ver 15.1 Distrib 10.3.25-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

如果您正在运行MySQL,则将看到以下输出:

MySQL out

1
putmysql  Ver 8.0.22-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))

请注意您正在运行的数据库。这将确定在本教程其余部分中要遵循的适当命令。

为了更改root密码,您需要关闭数据库服务器。如果您正在运行MariaDB,则可以使用以下命令进行操作:

1
sudo systemctl stop mariadb

对于MySQL,请通过运行以下命令关闭数据库服务器:

1
sudo systemctl stop mysql

在数据库停止的情况下,您可以在安全模式下重新启动它以重置root密码。

步骤2 —在没有权限检查的情况下重新启动数据库服务器

在没有权限检查的情况下运行MySQL和MariaDB允许使用root特权访问数据库命令行,而无需提供有效密码。为此,您需要停止数据库加载存储用户特权信息的授权表。由于这有一定的安全隐患,因此您可能还希望禁用网络连接,以防止其他客户端连接到临时易受攻击的服务器。

根据所安装的数据库服务器的不同,在不加载授权表的情况下启动服务器的方式也有所不同。

配置MariaDB在没有授权表的情况下启动

为了在没有授权表的情况下启动MariaDB服务器,我们将使用systemd单元文件为MariaDB服务器守护程序设置其他参数。

执行以下命令,该命令设置启动时MariaDB使用的MYSQLD_OPTS环境变量。在--skip-grant-tables--skip-networking选项告诉MariaDB的启动而不加载授权表或网络功能:

1
sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"

然后启动MariaDB服务器:

1
sudo systemctl start mariadb

该命令不会产生任何输出,但是会考虑到新的环境变量设置来重新启动数据库服务器。

您可以确保以开头sudo systemctl status mariadb

现在,你应该能够连接到数据库作为MariaDB的用户不提供密码:

1
sudo mysql -u root

您将立即看到数据库外壳提示:

1
MariaDB [(none)]>

现在,您可以访问数据库服务器了,您可以更改root密码,如步骤3所示。

配置MySQL以在没有授权表的情况下启动

为了在没有授权表的情况下启动MySQL服务器,您将更改MySQL的systemd配置,以便在启动时将其他命令行参数传递给服务器。

为此,请执行以下命令:

1
sudo systemctl edit mysql

此命令将在nano编辑器中打开一个新文件,您将用它来编辑MySQL的服务覆盖。这些更改了MySQL的默认服务参数。

该文件将为空。添加以下内容:

MySQL服务覆盖

1
2
3
[Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --skip-grant-tables --skip-networking

第一条ExecStart语句清除默认值,而第二条语句提供systemd新的启动命令,包括用于禁用加载授权表和联网功能的参数。

CTRL-x退出文件,然后Y保存所做的更改,然后ENTER确认文件名。

重新加载systemd配置以应用以下更改:

1
sudo systemctl daemon-reload

现在启动MySQL服务器:

1
sudo systemctl start mysql

该命令将不显示任何输出,但是数据库服务器将启动。授权表和联网将不会启用。

以root用户身份连接到数据库:

1
sudo mysql -u root

您将立即看到数据库外壳提示:

1
mysql>

现在您可以访问服务器了,您可以更改root密码了。

步骤3 —更改根密码

数据库服务器现在在受限模式下运行;授权表未加载,并且未启用任何网络支持。这使您可以在不提供密码的情况下访问服务器,但是它禁止您执行更改数据的命令。要重置密码,必须先获得对服务器的访问权限,然后才能加载授权表。

发出以下FLUSH PRIVILEGES命令,通知数据库服务器重新加载授权表:

1
FLUSH PRIVILEGES;

现在,您可以更改root密码。您使用的方法取决于您使用的是MariaDB还是MySQL。

更改MariaDB密码

如果您使用的是MariaDB,请执行以下语句来设置root帐户的密码,并确保将其替换new_password为您会记住的强壮的新密码:

1
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

您将看到以下输出,指示密码已更改:

1
OutputQuery OK, 0 rows affected (0.001 sec)

MariaDB允许使用自定义身份验证机制,因此请执行以下两条语句以确保MariaDB将对您分配给帐户的新密码使用其默认身份验证机制:

1
2
UPDATE mysql.user SET authentication_string = '' WHERE user = 'root';
UPDATE mysql.user SET plugin = '' WHERE user = 'root';

您将看到每个语句的以下输出:

1
OutputQuery OK, 0 rows affected (0.01 sec)

现在,密码已更改。键入exit以退出MariaDB控制台,然后继续执行步骤4以正常模式重新启动数据库服务器。

修改MySQL密码

对于MySQL,执行以下语句以更改root用户的密码,用new_password您会记住的强密码代替。MySQL允许使用自定义身份验证机制,因此以下语句还确保MySQL将使用其默认身份验证机制来使用新密码对用户进行身份验证:

1
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'new_password';

您将看到以下输出,指示密码已成功更改:

1
OutputQuery OK, 0 rows affected (0.01 sec)

现在,密码已更改。输入退出MySQL控制台exit

让我们以正常操作模式重新启动数据库。

第4步-将数据库服务器还原为常规设置

为了以正常模式重新启动数据库服务器,您必须还原所做的更改,以便启用网络并加载授权表。同样,您使用的方法取决于您使用的是MariaDB还是MySQL。

对于MariaDB,取消MYSQLD_OPTS设置先前设置的环境变量:

1
sudo systemctl unset-environment MYSQLD_OPTS

然后,使用systemctl以下命令重新启动服务:

1
sudo systemctl restart mariadb

对于MySQL,删除修改后的systemd配置:

1
sudo systemctl revert mysql

您将看到类似于以下内容的输出:

1
2
OutputRemoved /etc/systemd/system/mysql.service.d/override.conf.
Removed /etc/systemd/system/mysql.service.d.

然后,重新加载systemd配置以应用更改:

1
sudo systemctl daemon-reload

最后,重新启动服务:

1
sudo systemctl restart mysql

复制

现在,数据库已重新启动,并返回到其正常状态。通过以root用户身份使用密码登录来确认新密码是否有效:

1
mysql -u root -p

复制

系统将提示您输入密码。输入新密码,您将可以按预期访问数据库提示。

结论

您已恢复对MySQL或MariaDB服务器的管理访问权限。确保您选择的新密码安全可靠,并将其保存在安全的地方。

有关用户管理,身份验证机制或其他版本的MySQL或MariaDB的数据库密码重置方式的详细信息,请参阅官方的MySQL文档MariaDB文档

M1安装IPA文件

现在,还有部分 APP 暂未适配 M1 芯片的 MacBook,有没有什么办法提前用上呢?以下方法来自威锋论坛用户 MotorBottle。

  1. 在 macOS 的 App Store 搜索下载 Apple Configurator 2,打开后,用数据线连接 iPhone 或者 iPad
  • 点击 Apple Configurator 2 中的 iPhone,右键选择 – 添加 – App

  • 找到想要的 App,选择然后点击添加,下载 App

  • 下载完成后,Apple Configurator 2 会提示你,设备上已存在这个 App,注意,不要点任何按钮

  • 按 Command + Shift + G,打开这个路径:
    ~/Library/Group Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps/

  • 已经下载好的 ipa 安装包就在里面,把它拷贝出来,就安全了,不然会被自动删除

  • 双击 ipa 安装,打开时会报错,提示没有权限

  • 打开终端,输入
    sudo xattr -r -d com.apple.quarantine

App 路径(例如 sudo xattr -r -d com.apple.quarantine /Applications/WeChat.app

第 8 步其实就是把「sudo xattr -r -d com.apple.quarantine」输进去,然后去你的应用程序文件夹把装好的 App 拖到终端然后回车输密码就行。

本人MBP M1测试通过

如何保持iTerm2 ssh的连接

通过 ServerAliveInterval 配置实现ssh Session的保持,
在 ~/.ssh/config 中加入:

1
2
Host *
ServerAliveInterval 60

Docker compose 用法

原来的代码如下:

1
2
$ docker run -d --name redmine-name -v /root/redmine/files:/usr/src/redmine/files --link com-postgres:postgres -p 3000:3000 redmine
...

看起来不直观,修改容易出错
改成用docker compose

docker-compose 命令默认使用的配置文件是当前目录中的 docker-compose.yml 文件,当然我们可以通过 -f 选项指定一个其它名称的配置文件,比如:

1
$ docker-compose -f docker-compose-dev.yml up

常见的docker-compose.yml文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
version: '3'
services:
redmine:
image: "redmine:4.1"
container_name: redmine-name
hostname: redmine-name
ports:
- "3000:3000"
volumes:
- /root/redmine/config/configuration.yml:/usr/src/redmine/config/configuration.yml
- /root/redmine/config/database.yml:/usr/src/redmine/config/database.yml
- /root/redmine/files:/usr/src/redmine/files
- /root/redmine/plugins:/usr/src/redmine/plugins
links:
- "db"
db:
image: "postgres"
container_name: "com-postgres"
hostname: "com-postgres"
volumes:
- /root/postgres/datadir:/var/lib/postgresql/data
environment:
- POSTGRES_USER=redmine
- POSTGRES_PASSWORD=secret

最后启动和停止

1
2
$ docker-compose up -d
$ docker-compose down

安装docker-ce

1
2
3
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install yum-utils device-mapper-persistent-data lvm2
yum install docker-ce docker-ce-cli containerd.io

需要的话

1
systemctl start docker

安装nvidia驱动

1
2
3
4
sudo yum-config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-rhel7.repo
sudo yum clean all
sudo yum -y install nvidia-driver-latest-dkms cuda
sudo yum -y install cuda-drivers

有可能需要重启服务器

安装nvidia-docker

1
2
3
4
5
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo

sudo yum install -y nvidia-container-toolkit
sudo systemctl restart docker

测试docker gpu

1
2
3
docker run --gpus all nvidia/cuda:10.0-base nvidia-smi  
docker run --gpus 2 nvidia/cuda:10.0-base nvidia-smi
docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi

运行tensorflow gpu简单例子

## docker pull tensorflow/tensorflow:2.0.1-gpu-py3

Tensorflow 1.X

1
2
3
docker run -it --rm tensorflow/tensorflow:1.15.2-gpu-py3 \
python -c "import tensorflow as tf; tf.enable_eager_execution();
print(tf.reduce_sum(tf.random_normal([1000, 1000])))"

Tensorflow 2.X

1
2
3
4
docker run -it --gpus all tensorflow/tensorflow:2.0.1-gpu-py3\
python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))" #OK

docker run --gpus all -it tensorflow/tensorflow:2.0.1-gpu-py3 bash #OK