安装 MariaDB 在 Ubuntu20.4 中

本贴最后更新于 274 天前,其中的信息可能已经沧海桑田

完全卸载 mariadb

首先删除 mysql:

sudo apt-get remove mysql-*

然后清理残留的数据

dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P

它会跳出一个对话框,你选择 yes 就好了

安装 mariadb

安装 software-properties-common​ 这个软件包

sudo apt install software-properties-common

安装 mariaDB,使用 apt 会默认安装稳定版本的数据库,

sudo apt install mariadb-server

如果需要制定版本需要按以下操作:

  1. 添加 MariaDB 仓库: 首先,您需要添加 MariaDB 的官方 APT 仓库到您的系统中。这可以通过导入 MariaDB 的 GPG 密钥并添加仓库列表来完成。

    sudo apt-get install curl
    curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
    

    这个脚本会自动添加 MariaDB 的 GPG 密钥和 APT 仓库到您的系统中。

  2. 选择版本: 在添加了 MariaDB 仓库之后,您可以查看可用的 MariaDB 版本。

    sudo apt-cache policy mariadb-server
    

    这将列出所有可用的 MariaDB 版本。您可以从列表中选择您需要的版本。

  3. 安装特定版本的 MariaDB: 使用 apt-get​安装特定版本的 MariaDB 服务器。

    例如,如果您想安装版本 10.6,可以使用以下命令:

    sudo apt-get install mariadb-server-10.6
    

一旦安装完成,MariaDB 服务将会自动启动。

想要验证数据库服务器是否正在运行,输入:

sudo systemctl status mariadb

保护 MariaDB

MariaDB 服务器有一个脚本叫做 mysql_secure_installation​,它允许你可以很容易提高数据库服务器安全。这里照着做就行了,网上文档都这么说

不带参数运行脚本:

sudo mysql_secure_installation

脚本将会提示你输入 root 密码:

因为你没有设置 root 密码,仅输入回车"Enter”。

Enter current password for root (enter for none):

在下一个提示中,你会被问到是否 MySQL root 用户设置密码:

Set root password? [Y/n] Y

输入 Y。设置 root 密码。

Remove anonymous users? [Y/n] Y。 是否移除匿名用户
Disallow root login remotely? [Y/n] N  是否禁止root用户远程登录数据库
Remove test database and access to it? [Y/n] Y  是否移除测试数据库
Reload privilege tables now? [Y/n] Y  是否重新加载权限表

在 Ubuntu 上, MariaDB 用户默认使用 auth_socket​进行鉴权。这个插件会检查启动客户端的本地系统用户是否和指定的 MariaDB 用户名相匹配。

这里的 auth_socket​是一个身份验证插件,它允许数据库用户通过 Linux 系统的用户账户进行认证。这里是这个过程的详细解释:

  1. auth_socket 插件:这个插件是 MariaDB 用于身份验证的一个组件。当这个插件被用于一个 MariaDB 用户时,它不会要求用户输入密码,而是检查尝试连接到数据库的客户端的系统用户。
  2. 本地系统用户匹配:当使用 auth_socket​进行身份验证时,MariaDB 会检查尝试连接的用户是否与 Linux 系统中的一个本地用户账户同名。如果同名,并且该本地用户账户是有效的,那么认证就会成功。

例如,如果你有一个名为 john​的 Linux 系统用户,并且你在 MariaDB 中也有一个名为 john​的用户,那么 john​这个系统用户就可以直接连接到 MariaDB,而无需输入密码。这是因为 auth_socket​插件会根据系统用户的身份自动认证。

允许远程访问-设置 mariadb 数据库服务可以被远程访问:

如果需要远程连接 MariaDB,修改配置文件:/etc/mysql/mariadb.conf.d/50-server.cnf

sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf

在此示例中,我们将值更改为 0.0.0.0​,将 MySQL 服务器设置为监听所有 IPv4 地址。

bind-address           = 0.0.0.0
# skip-networking

在 MySQL 8.0 和更高版本中,bind-address​指令可能不存在。在这种情况下,请将 bind-address= 0.0.0.0​其添加到 [mysqld]​下。

允许远程访问-设置用户可以远程访问:

允许 root 用户远程访问

设置 root 用户,为 root 用户赋予了所有数据库的所有权限,允许 root 用户从任何主机(%​表示任何主机)远程访问数据库。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你数据库root用户的密码';

创建自定义管理员用户

第二个,推荐的方式就是创建一个管理员用户,可以访问所有的数据库:你可以将这个管理员用户命名为任何你想要的名字,但是请确保你使用了一个强大的密码。

下面命令,创建用户

create user 'administrator'@'%' identified by '你数据库administrator用户的密码';

下面命令,修改了一个名为 administrator​的用户的密码和认证方法。mysql_native_password​是一种常见的认证插件。

ALTER USER 'administrator'@'%' IDENTIFIED WITH mysql_native_password BY '你数据库administrator用户的密码';

下面命令,赋予了 administrator​用户从任何主机远程访问所有数据库和表的权限。

GRANT ALL PRIVILEGES ON   *.*   TO 'administrator'@'%' IDENTIFIED BY '你数据库administrator用户的密码';

重启数据库

service mysql restart

以 root 身份远程登录

想要在终端命令行和 MariaDB 服务器进行交互,使用 mysql​客户端工具或者 mariadb​。这个工具被作为 MariaDB 服务器软件包的依赖软件被安装。

这个 auth_socket​插件将会通过 Unix socket 文件验证用户来连接 localhost​。这就意味着你不能通过提供密码来验证 root。

想要以 root 用户名登录 MariaDB 服务器,输入:

sudo mysql -u root -p

你将会被展示 MariaDB shell,就像下面一样:

image

如果使用第三方客户端程序 ,以 root 身份登录 MariaDB 服务器,需要将鉴权方法从 auth_socket​修改为 mysql_native_password

你可以通过运行下面的命令做到:

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你数据库的root密码';
FLUSH PRIVILEGES;

常用命令

查看数据库和数据表

mysql\>show database;    //列出所有数据库
mysql\>use ‘数据库名’;    //切换数据库
mysql\>show tables;      //列出所有表
mysql\>describe 表名;    //显示数据表结构

更新权限

FLUSH PRIVILEGES;

创建用户

create user '用户名'@'可访问控制' identified by '密码'; 可访问控制参数:localhost , ip ,%

create user 'demo'@'%' identified by '123456';

创建数据库

create database demoDB;

授予数据库权限

授权 demo 用户拥有 demoDB 数据库的所有权限(某个数据库的所有权限):后面的密码是 demo 用户的密码,不是 root 用户的

grant all privileges on demoDB.* to demo@% identified by '123456';
flush privileges;//刷新系统权限表,必须刷新,不然不生效

授予全部权限

grant all privileges on *.* to 'demo'@'%';

刷新系统权限

flush privileges;//刷新系统权限表,必须刷新,不然不生效

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...