MariaDB与mysql区别

MySQL被甲骨文收购后有闭源风险,MariaDB作为MySQL的一个开源分支,其完全兼容MySQL,包括命令与api,可作为MySQL的替代品。比如以下命令,运行效果都是重启mariadb:

systemctl restart mariadb
systemctl restart mysql

MySQL数据结构

每一个mysql软件可创建多个数据库,每个数据库可以添加多个表,而每个表中可以含有多行、多列的字符串,数据就是存储在这些行与列的字符串中。

安装与初始化

#安装MariaDB
sudo apt install mariadb-server
sudo systemctl start mariadb
sudo systemctl status mariadb
sudo systemctl enable mariadb

#初始化
sudo mysql_secure_installation

*** Switch to unix_socket authentication [Y/n] n***
询问您是否要切换到使用UNIX套接字文件进行身份验证,建议否;
开启意味着只有本地用户(系统上的用户)才能访问MySQL服务器,无法通过网络连接进行访问。

*** Enter current password for root (enter for none): ***
回车,默认情况下无密码

*** Change the root password? [Y/n] y***
是否更改MySQL root用户的密码。默认情况下MySQL root用户没有设置密码。

*** Remove anonymous users? [Y/n] y ***
移除匿名用户

*** Disallow root login remotely? [Y/n] y ***
不允许root用户远程登录

*** Remove test database and access to it? [Y/n] y ***
移除测试数据库及其相关访问权限

*** Reload privilege tables now? [Y/n] y***
是否要重新加载MySQL权限表。进行了任何更改,则需要重新加载MySQL权限表才能使更改生效。

#登录
mysql -u root -p //本地shell登录
mysql -h192.168.1.1 -uroot -p -P3306 //远程shell登录

对数据库操作

SHOW DATABASES; //查看已有数据库
CREATE DATABASE .......; //创建数据库
USE your_database_name; //选择数据库
DROP DATABASE your_database_name; //删除数据库,需当前未选择该数据库

#数据库导出与导入
mysqldump -u 用户名 -p 数据库名 > 导出文件路径.sql  //数据库导出
mysql -u 用户名 -p 目标数据库名 < 导入文件路径.sql  //数据库导入

对表操作

SHOW TABLES;
SELECT id, code FROM invite_codes;
SELECT * FROM invite_codes WHERE used = TRUE;
SELECT * FROM users;
SELECT * FROM users WHERE chatid = ? AND emby_url = ?;
SELECT * FROM users WHERE chatid = <chatid> OR userid = '<userid>';
DELETE FROM users WHERE name = 'John';
DELETE FROM users WHERE name = 'John';

#创建表。创建名为codes的表的SQL语句,该表包含id、code和used三个列。其中id列是整数类型,不为空且自动递增;code列是8位字符类型,不为空;used列是布尔类型,默认值为FALSE。该表的主键是id列。
CREATE TABLE codes (
    id INT NOT NULL AUTO_INCREMENT,
    code CHAR(8) NOT NULL,
    used BOOLEAN DEFAULT FALSE,
    PRIMARY KEY (id)
);

#向codes表中插入两条新记录,这两条记录分别包含一个8位长的随机字符串作为字符码
INSERT INTO codes (code) VALUES ('ABCD1234'), ('EFGH5678');

#表插入2个参数
INSERT INTO user (chatid, userid) VALUES (<chatid>, '<userid>');

对用户操作

#创建用户wordpress
CREATE USER 'wordpress'@'%' IDENTIFIED BY '<password>';  //任意地址访问
CREATE USER 'wordpress'@'locahost' IDENTIFIED BY '<password>';  //仅限本地访问

#赋予用户数据库权限
*** 允许用户wordpress从任意地址访问数据库wordpress ***
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'%' WITH GRANT OPTION;

*** 仅限允许用户wordpress从本地访问数据库wordpress ***
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'locahost' WITH GRANT OPTION;

#查看用户权限
SELECT User, Host, authentication_string, plugin FROM mysql.user WHERE User = 'root';

User | Host      | authentication_string | plugin      |
+------+-----------+-----------------------+-------------+
| root | localhost |                       | unix_socket

#更新用户远程访问
UPDATE mysql.user SET Host='%' WHERE User='root'; //将localhost修改为 %

#查看用户有权访问的数据库
SHOW GRANTS FOR '用户名'@'主机名';

#删除用户
DROP USER '用户名'@'主机名';

用户远程访问

注意,对于mysql来说,权限都是“用户@主机名”形式的,任一修改了,都得重新赋权

#配置文件/etc/mysql/mariadb.conf.d/50-server.cnf,将[mysqld]下的监听地址修改为0.0.0.0
bind-address = 0.0.0.0 

#修改“用户@主机名”远程访问
UPDATE mysql.user SET Host='%' WHERE User='root'; //将localhost修改为 %

#修改“用户@主机名”拥有数据库权限
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'%' WITH GRANT OPTION;

#刷新权限
FLUSH PRIVILEGES;

#重启mysql
systemctl restart mysql

删除 MariaDB 软件

sudo systemctl stop mariadb  //停止mysql
sudo systemctl disable mariadb //去除开机自启
sudo apt-get remove --purge mariadb-server //删除软件
rm -rf /etc/mysql  // 删除配置文件

“一花一世界,一叶一天堂。君掌盛无边,刹那成永恒。”