blog/Ubuntu安装MySQL-MariaDB-过程.md

90 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Ubuntu 安装MySQL(MariaDB)过程
date: 2020-07-22 22:54:29
tags:
- Linux
- Ubuntu
- MySQL
- MariaDB
- 数据库
categories:
- MariaDB
---
> 本文内容简单,只是整理了一下常规操作而已。
> MariaDB 是 MySQL 的一个分支主要由开源社区在维护,采用 GPL 授权许可。开发这个分支的原因之一是:甲骨文公司收购 MySQL 后,有将 MySQL 闭源的潜在风险,因此社区采用分支的方式来避开这个风险。
>
> MariaDB 的目的是完全兼容 MySQL包括 API 和命令行,使之能轻松成为 MySQL 的代替品。
> 一般情况下我在个人的学习和开发中都会使用 MariaDB 来代替 MySQL就像我会使用 Open JDK 来代替 Oracle JDK 一样。
## 1. 安装
在 Ubuntu 上安装 MySQL
```
sudo apt-get install mysql-client mysql-server
```
安装 MariaDB 的话,把 "mysql" 改成 "mariadb" 即可:
```
sudo apt-get install mariadb-client mariadb-server
```
一般来说安装完成之后都是自动运行的,如果没有运行,可以执行 `sudo service mysql start` 启动它MySQL 和 MariaDB 都一样)。
> 关闭服务:`sudo service mysql stop`
> 查看服务状态:`sudo service mysql status`
> 我在阿里云的 Ubuntu 20.04 上安装 MySQL版本输出信息为
> Server version: 8.0.20-0ubuntu0.20.04.1 (Ubuntu)
>
> 在本地机的 Ubuntu 18.04.4 MariaDB版本输出信息为
> Server version: 10.1.44-MariaDB-0ubuntu0.18.04.1 18.04
## 2. 初始化
```
mysqld -initialize
```
耐心等待命令执行完成。
## 3. 设置
### 3.1 登录数据库
切换系统 root 用户,输入
```
mysql -u root -p
```
不用输入密码,直接回车,登录 MariaDB或者 MySQL
### 3.2 修改密码
```
set password for root@localhost = password('123');
```
> 否则默认密码为空。
### 3.3 修改 `plugin` 属性为 `mysql_native_password`
```sql
use mysql;
update user set plugin='mysql_native_password' where user='root';
```
然后输入 `flush privileges;` 使之生效。
> 否则系统的其他用户无法登录数据库的 root 用户。
> ERROR 1698 (28000): Access denied for user 'root'@'localhost'
### 3.4 将 `host` 属性设置为 `%`
```sql
use mysql;
update user set host = '%' where user = 'root';
```
然后输入 `flush privileges;` 使之生效。
> 否则其它设备上的客户端DataGrid、Netcat 以及我们自己编写的程序等)无法登录数据库的 root 用户。
## 4. 注意!!!
上面的 3.3、3.4 针对的是我学习生活中需要在其他设备、其他系统用户上登录数据库的 root 用户。实际上,为了安全,我们可能不会允许这么做。
例如我们可能保留 root 用户的 plugin 属性为 unix_socket系统的普通用户也只能登录数据库的其他用户只有系统的 root 用户才能登录数据库的 root 用户。
我们还可能保留 root 用户的 host 属性为 localhost或者只允许在指定的主机上登录 root还可以添加另一个数据库用户设置好适合的权限用来在其他设备上登录并操作数据库。