1.准备-使用putty远程登录服务器。

(1)启动putty

ecs如何用mysql ecs部署数据库_mysql

  • Host Name(or IP address):输入ECS的公网IP
  • Port:22
  • Connection Type:SSH
  • Saved Sessions(可选):输入一个便于记忆识别的名称,点击Save可以保存以上三个设置,下次可以不用再输入。
    补充:SSH

(2)单击Open

首次连接时会出现PuTTY Security Alert警告,表示PuTTY无法确认远程服务器的真实性,只能提供服务器的公钥指纹。选择是,表示您信任该服务器,PuTTY会将公钥指纹加入到本地设备的注册表中。

ecs如何用mysql ecs部署数据库_服务器_02


补充:公钥指纹

(3)输入用户名

(4)输入实例登录密码

如果出现Welcome to Alibaba Cloud Elastic Compute Service !,表示成功连接到实例。

2.安装MySql

(1)更新YUM源

rpm -Uvh  http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

补充:YUM源补充:RPM

(2)安装MySQL

yum -y install mysql-community-server

补充:yum -y

(3)查看MySQL版本号

mysql -V

如果返回
mysql Ver 14.14 Distrib 5.7.26, for Linux (x86_64) using EditLine wrapper
证明安装成功。

3.配置MySQL

(1)启动MySQL服务

systemctl start mysqld

补充:systemctl命令补充:mysqld和mysql

(2)设置MySQL服务开机自启动

systemctl enable mysqld

(3)获取root用户的初始密码

grep 'temporary password' /var/log/mysqld.log

补充:grep命令

(4) 对MySQL进行安全性配置

mysql_secure_installation

4.1) 重新设置root用户的密码

Enter password for user root: #输入上一步获取的root用户初始密码
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration of the plugin.
Using existing password for root.
Estimated strength of the password: 100 
Change the password for root ? ((Press y|Y for Yes, any other key for No) : Y #是否更改root用户密码,输入Y
New password: #输入新密码,长度为8至30个字符,必须同时包含大小写英文字母、数字和特殊符号。特殊符号可以是()` ~!@#$%^&*-+=|{}[]:;‘<>,.?/
Re-enter new password: #再次输入新密码
Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y #是否继续操作,输入Y

4.2 )删除匿名用户账号

By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y  #是否删除匿名用户,输入Y
Success.

补充:Mysql匿名用户

4.3)禁止root账号远程登录

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y #禁止root远程登录,输入Y
Success.

4.4)删除test库

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y #是否删除test库和对它的访问权限,输入Y
- Dropping test database...
Success.

补充:Mysql的test库

4.5)重新加载授权表

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y #是否重新加载授权表,输入Y
Success.
All done!

4.远程访问MySql数据库

(1)登录MySQL

mysql -uroot -p

(2)创建远程登录MySQL的账号和密码

mysql> grant all on *.* to 'dms'@'%'IDENTIFIED BY '123456'; #使用root替换dms,可设置为允许root账号远程登录。
mysql> flush privileges;

(3)添加安全组

知识Note


1.SSH

SSH为Secure Shell的缩写,是建立在应用层基础上的安全协议。专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。很容易受到中间人攻击。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道"。

从客户端来看,SSH提供两种级别的安全验证。

第一种级别(基于口令的安全验证)

只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。

第二种级别(基于密匙的安全验证)

需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒。


2.公钥指纹

两者传递信息时,如服务器和我的主机。如果采用明文传输,内容很容易被截获暴露。因此,服务器给我的主机了一个箱子(公钥),我的主机把信息放到箱子里面,锁上(公钥加密),再进行传输。由于只有服务器有这个箱子的钥匙(私钥),所以不用怕信息被截获暴露。

但是,还有一个问题——如果我主机拿到的箱子不是来自服务器的呢?
所以就出现了公钥指纹

真实SSH使用:


如果你是第一次登录对方主机,系统会出现下面的提示:


  $ ssh user@host


  The authenticity of host 'host (12.18.429.21)' can't be established


  RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.


  Are you sure you want to continue connecting (yes/no)?


——我要给你个箱子,你要不要?


这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?



所谓"公钥指纹",是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。

很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?
回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。
假定经过风险衡量以后,用户决定接受这个远程主机的公钥。
  Are you sure you want to continue connecting (yes/no)? yes
系统会出现一句提示,表示host主机已经得到认可。
  Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.
当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。
每个SSH用户都有自己的known_hosts文件,此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的(确实是正经人给的箱子)远程主机的公钥。

总之,这种使用方法,可以一定程度上保证信息不被泄露。


3.YUM

YUM 全称为 Yellow dog Updater Modified,是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。 YUM的图形化前端主要有yumex和kyum。


常用的命令行命令有


yum install foo-x.x.x.rpm #安装软件(以foo-x.x.x.rpm为例)


yum remove foo-x.x.x.rpm或者yum erase foo-x.x.x.rpm #删除软件


yum upgrade foo或者yum update foo #升级软件


yum info foo #查询信息


yum search foo #搜索软件(以包含foo字段为例)


yum deplist foo #显示软件包依赖关系



4.RPM

RPM的全称是Red-Hat Package Manager(RPM软件包管理器),一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM的主要功能是安装、卸载、升级和管理软件;组件查询功能;验证功能;软件包GPG和MD5数字签名的导入、验证和发布;软件包依赖处理;选择安装;网络远程安装功能等。


常用的命令行命令有


-e 卸载rpm包


-q 查询已安装的软件信息


-i 安装rpm包


-u 升级rpm包


--replacepkgs 重新安装rpm包


--justdb 升级数据库,不修改文件系统


--help 帮助


-c 显示所有配置文件


-d 显示所有文档文件


-h 显示安装进度


-l 列出软件包中的文件


-a 显示出文件状态


-p 查询/校验一个软件包文件


-v 显示详细的处理信息


--dump 显示基本文件信息


--nomd5 不验证文件的md5支持


--nofiles 不验证软件包中的文件


--nodeps 不验证软件包的依赖关系


--whatrequires 查询/验证需要一个依赖性的软件包


--whatprovides 查询/验证提供一个依赖性的软件包



5.yum -y

如果使用yum install xxxx,会找到安装包之后,询问你Is this OK[y/d/N],需要你手动进行选择。但是如果加上参数-y,就会自动选择y,不需要你再手动选择。

6.systemctl命令

历史上,Linux 的启动一直采用init进程。这种方法有两个缺点。一是启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。二是启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。


Systemd 就是为了解决这些问题而诞生的。它的设计目标是,为系统的启动和管理提供一套完整的解决方案。根据 Linux 惯例,字母d是守护进程(daemon)的缩写。 Systemd 这个名字的含义,就是它要守护整个系统。


使用了 Systemd,就不需要再用init了。Systemd 取代了initd,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。 Systemd 的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。


systemctl是 Systemd 的主命令,用于管理系统。



7.mysqld与mysql


.mysql是客户端,mysqld是服务


mysqld其实是SQL后台程序(也就是MySQL服务器),它是关于服务器端的一个程序,mysqld意思是mysql daemon,在后台运行,监听3306端口,如果你想要使用客户端程序,这个程序必须运行,因为客户端是通过连接服务器来访问数据库的。你只有启动了mysqld.exe,你的mysql数据库才能工作。mysql是一个客户端软件,可以对任何主机的mysql服务(即后台运行的mysqld)发起连接。

8.grep命令

Linux grep 命令用于查找文件里符合条件的字符串。


具体命令参见"Linux grep 命令 https://www.runoob.com/linux/linux-comm-grep.html"

9.MySQL匿名用户

新安装的mysql默认是有匿名用户的,你在本机,输入任意用户名都可以登录,只不过不可以访问mysql库。删除之后更加安全。

10.MySQL的test库

test库在MySQL中特殊存在,一般部署完mysql后应当删除该库,并规定不能创建以test和test_字符开头的数据库。这是 mysql 的默认规则,文档上写得很清楚,凡是名字以 test 这 4 个字母开头的 db,所有用户在这个库上都有管理员权限。所以为了安全,一般在装好 mysql 以后,都会删除 test 库。


参考文献
[1]公钥,私钥和数字签名这样最好理解
[2]Systemd 指令
[3]手动部署MySQL数据库(CentOS 7) https://help.aliyun.com/document_detail/116727.html?spm=a2c4g.11186623.6.1199.2c3d2022vJedUT