前言
- MariaDB是MySQL的分支,因为害怕乌龟壳买下MySQL后收费因而从中独立出来
- Maria的原作者年事已高,加上一直做着免费的事没有经费人员,因此前几年风评很一般
- 但目前谷歌的GCP或是亚马逊AWS都首选MariaDB
- 2者的基本语法基本一致,性能差距不明显(针对MySQL的优化语句可能比Maria快,但大多数时候是差不多的)
- 因此本文旨在指导如何安装MariaDB
- 个人觉得,所有可以通过远程(外网)访问的的数据库都是极其愚蠢的操作,因此最后会演示如何通过ssh来进行数据库的访问
流程概述
- 安装MariaDB
- 创建账号,赋予权限
- 通过ssh登陆
1. 安装MariaDB
> apt update
> sudo apt install mariadb-server
不同版本(指vps供应商)的Ubuntu在进行install时可能出现Couldn't find package
可以参考maria官方的解决办法: https://downloads.mariadb.org/mariadb/repositories/
选择你的系统版本和镜像源安装证书,再次install即可
一般maria安装完成后不需要密码直接输入mysql
即可进入数据库
因为默认他的密码采用unix_socket
这点可以通过 ↓ 语句得到进行验证
select user, plugin from mysql.user;
2. 创建账号,赋予权限
安装完后可以查看下所有用户
select distinct concat('User: ''',user,'''@''',host,''';') AS query from mysql.user;
正常情况你应该只能看到User: 'root'@'localhost';
接着创建一个localhost的用户new
create user new@localhost identified by 'yourpassword';
这里为什么选择localhost而不是%是有原因的,因为通过ssh可以直接使用localhost类型的账号
再赋予用户new所有权限
grant all privileges on *.* to new@localhost;
如果不放心可以查看下刚刚创建的账号new的权限
show grants for 'new'@'localhost';
3. 通过ssh登陆
首先,你的远程服务器已经开启了ssh登陆(如果没有请自行Bing
这里只演示如何通过图形工具(例如SQLyog)来访问数据库
(或者你也可以通过命令行例如ssh root@123.123.123.123
,然后直接mysql
连接上数据库)
先切到SSH标签页
根据需要自行填写
补充一句,aws或是gcp创建服务器后便禁止密码访问远程服务器的
我18年用国内的御三家时还没有这么做
这里极力推荐禁止密码登陆转而使用pem/ppk密钥登陆
不要觉得"我的密码很长没必要"
如果你觉得某日进系统看到密码被试几万次也是无所谓的心态我觉得也可以
再换到MySQL那页
这里主机地址不是你服务器地址,而是localhost
因为ssh的本质是直接控制了远程的服务器,而刚才也没开通远程登陆的账号
%
因此此处不能填写你服务器的地址
如果使用navcat也是类似的操作
如果使用简单的例如vscode中的数据库连接工具(例如MySQL)那么可能没有ssh登陆的功能
最后测试下,正常来说已经可以连接,也不需要去改my.cnf
中的bind-address
因为正式生产环境中任何远程(外网)访问的数据库的操作都是极其愚蠢的
后记
之前因为偷懒我一直使用docker中的数据库(maria和redis)
前几天被扫接口的一锅端了,还好损失不大,数据有定期备份到家里的nas中
因此花了一天去研究怎么通过ssh去连接docker中的maria/redis
在开启服务商的防火墙后,成功拦截maria和redis
然后通过RedisDesktopManager设置ssh便可访问到redis
但maria不管怎么改配置都是失败(code 2013)
洗了个澡后脑子清楚了些
猜测是因为maria需要系统用户的某些权限(root)来实现某些操作,而redis不需要
因此redis通过ssh连接上母鸡后直接通过端口映射找到docker内的redis
而maria端口映射后容器内的用户再次需要ssh验证,这就导致无法进行后续的工作
(实际报错也是2013-lost-connection-to-mysql-server-at-reading-initial-communication-packet
)
之前maria做在docker中还需要配置volume让data映射到外部的母鸡,不然数据都拿不到
除了下载和配置方便(包括创建数据库的账号也是命令行搞定,而且一次编写,到处复制)
但实际操作局限性远远高于配置在母鸡中(比如ssh很麻烦,取数据麻烦)
今后可能redis依然会用容器(因为丢容器反而更安全)
而数据库还是老老实实用母鸡的吧
参考地址
一些sql语句是别人那儿临时复制来的,原来的地址忘记保留了
网友评论