ECS手动部署MySQL数据库
1.准备-使用putty远程登录服务器。
(1)启动putty
- Host Name(or IP address):输入ECS的公网IP
- Port:22
- Connection Type:SSH
- Saved Sessions(可选):输入一个便于记忆识别的名称,点击Save可以保存以上三个设置,下次可以不用再输入。
补充:SSH
(2)单击Open
首次连接时会出现PuTTY Security Alert警告,表示PuTTY无法确认远程服务器的真实性,只能提供服务器的公钥指纹。选择是,表示您信任该服务器,PuTTY会将公钥指纹加入到本地设备的注册表中。
补充:公钥指纹
(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
(2)安装MySQL
yum -y install mysql-community-server
(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
(2)设置MySQL服务开机自启动
systemctl enable mysqld
(3)获取root用户的初始密码
grep 'temporary password' /var/log/mysqld.log
(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个字符,必须同时包含大小写英文字母、数字和特殊符号。特殊符号可以是()` aaa@qq.com#$%^&*-+=|{}[]:;‘<>,.?/
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.
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.
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 aaa@qq.com
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]公钥,私钥和数字签名这样最好理解 https://blog.csdn.net/weixin_36082485/article/details/53386190
[2]Systemd 指令 https://www.cnblogs.com/zwcry/p/9602756.html
[3]手动部署MySQL数据库(CentOS 7) https://help.aliyun.com/document_detail/116727.html?spm=a2c4g.11186623.6.1199.2c3d2022vJedUT
推荐阅读
-
8种手动和自动备份MySQL数据库的方法
-
Linux远程部署MySQL数据库详细步骤
-
Mysql数据库从5.6.28版本升到8.0.11版本部署项目时遇到的问题及解决方法
-
SQL Server 2008 数据库镜像部署实例之二 配置镜像,实施手动故障转移
-
Hive的安装与部署(MySQL作为元数据库)
-
8种手动和自动备份MySQL数据库的方法
-
使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库
-
在阿里云ECS上部署 Django+MySQL+uWSGI+Nginx 项目的基本流程
-
如何通过 Docker 部署 Logstash 同步 Mysql 数据库数据到 ElasticSearch
-
在*面centos7上部署MYSQL5.7数据库