Linux系统ssh远程连接到本地数据库部署完整教程

数据库 专栏收录该内容
1 篇文章 0 订阅


从什么也不懂到完美部署的血泪之路告诉我:
不要一激动就删库!
不要一激动就删库!
不要一激动就删库!
30多g的数据,说删就删,换的就是又要耗费大概半天时间去scp传输,耗是时间,逝去的可都是青春啊。整个过程其实都还算顺利,坑多了点,但网上的资料都比较友好,基本都是有解决方案的。本文也附上了很多解决方案的链接~

注意:以下操作的前提是远程主机已经安装了mysql数据库,并创建了database,如果是还没有安装mysql的小伙伴建议先找安装教程,网上有很多,教程很全,这里就不废话了。

实现终端远程登录

其实,这件事一开始并没有打算做这么多,只是单纯的想把数据直接用硬盘拷到电脑中,然后直接导入数据库中再建立连接就完事了,但谁想上来就遇到了第一个问题,也就是特立独行的Linux系统无法识别我手中的MacOS格式和ExFAT格式的硬盘,也就直接否定了这条简单粗暴的道路。于是伙伴告诉我可以尝试ssh远程连接,同时也能解决这个Linux 系统无法输入中文字符的问题。

  • 首先,在本地主机打开终端,输入ssh user@host命令(其中user是远程主机的用户名,host则是远程主机的IP地址)。

不用说,第一次登录肯定是失败了,因为我什么也没有检查,如果你的登录成功了那么可以直接跳过这一节了讲解了。

这里说一下ssh登录失败后的排错经验:

  1. 检查远程主机 ip 是否可用 (ping)
  2. 检查远程主机 22 端口是否被防火墙禁用
  3. 检查 ssh 是否开启
  4. 检查 ssh_key 是否存在

我遇到的问题有两个:

  1. 其一是 CentOS7(这是我使用的远程主机系统版本) 的防火墙端口开启:

参考 Centos7防火墙开启端口并测试

  1. 第二个坑,报错如下:
    SSH_Unable to negotiate with 192.168.1.152 port 22: nomatching host host key type found. Their offer:ssh-dss
    根据搜索结果得知原因为:没有找到相关的主机密钥类型。解决方法很简单,没有key生成key就可以了。

操作如下:

  • 远程主机打开终端并输入以下命令生成ssh_key
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
  • 重启ssh
service ssh restart

重启ssh之后远程如果问题依然存在,此时确认密钥已存在,可以进一步指定主机key算法(最后解决方案)

  • 远程主机的~/.ssh目录下添加config
vi ~/.ssh/config
  • 在config中写入以下code:
Host *
    HostKeyAlgorithms +ssh-dss
  • 重启ssh
service ssh restart
  • 本地主机终端的输入命令中加参数
ssh -o HostKeyAlgorithms=+ssh-dss user@host

输入密码,登录成功!
在这里插入图片描述

参考:Nomatching host host key type found

SSH命令行传输文件到远程服务器(及其加速)

以前在windows上一直用可视化的文件传输工具,操作方便,但在mac下用终端登录上去之后,想传个文件再用工具就显得绕路了,所以我搜索了一番发现,还是有命令行工具的,名字叫SCP。
使用方式如下(以下操作都是在本地主机):

  • 上传本地文件到服务器
scp /path/filename user@host:/path/

其中user是远程主机的用户名,host则是远程主机的IP地址,下同。

例如 scp /root/data.sql root@192.168.225.181:/home/data.sql 就是把本机 /root/ 目录下的 test.xml 文件上传到192.168.225.181这台服务器上的 /home/ 目录中

  • 从服务器上下载文件
scp user@host:/path/filename /local_dir/path(本地目录)

参考 使用SSH命令行传输文件到远程服务器

虽然找到了直接的传输方法,但接下来还出现了一个问题就是,要上传的 .sql 文件过大,传输耗时太长了(大概30G的文件要传几天)。于是,百般搜索下我找到了加快 scp 传输速度的方法。

  • 改变 ssh 加密算法,可以让速度更快(通常,越弱的加密算法,速度越快)
  • 通常压缩会降低scp速度,但这与数据类型有很大关系,对压缩率非常高的数据启用压缩,可以加速

具体方法就是在 scp 后面加参数就好啦

scp -r -c arcfour128 ...
scp -r -c aes192-cbc ...
启用压缩使用参数: -o "Compression yes"

参考 加速scp传输速度

mysql导入sql文件(及其加速)

文件拷入远程服务器后就是数据入库了,以下操作都在远程主机上进行。
.sql文件的导入很简单,常用source 命令:

  • 进入mysql数据库控制台
mysql -u root -p

进入数据库,然后使用source命令,后面参数为要导入的文件路径(如这里用到的.sql)

mysql>use 数据库名称
mysql>source /home/data.sql

参考 mysql导入导出sql文件

和传输一样,这里也遇到了导入速度太慢的问题,解决方法为:

  • 在mysql的安装目录下找到my.cnf文件(windows 下为 my.ini,linux 下为 my.cnf)
  • innodb_flush_log_at_trx_commit这个参数改为0
  • 加入以下代码:
interactive_timeout = 120
wait_timeout = 120
max_allowed_packet = 32M

参考 MySQL mysqldump与source导入慢的解决方法

我在修改时没有加最后三行代码,只修改了参数,速度确实快了很多。这里值得注意的是innodb_flush_log_at_trx_commit这个参数的意义,要根据自己数据的重要性进行更改:

  • 如果innodb_flush_log_at_trx_commit设置为 0,log buffer 将每秒一次地写入 log file 中,并且 log file 的 flush (刷到磁盘)操作同时进行。该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。
  • 如果innodb_flush_log_at_trx_commit设置为 1,每次事务提交时 MySQL 都会把 log buffer 的数据写入 log file,并且 flush 中去.
  • 如果innodb_flush_log_at_trx_commit设置为 2,每次事务提交时 MySQL 都会把 log buffer 的数据写入 log file 。但是 flush 操作并不会同时进行。该模式下,MySQL 会每秒执行一次 flush 操作。
  • 注意:
    由于进程调度策略问题,这个“每秒执行一次 flush(刷到磁盘) 操作”并不是保证100%的“每秒”。

参考 sync_binlog和innodb_flush_log_at_trx_commit浅析

Linux下mysql的远程连接

远程主机的数据库准备好了以后还没有结束,我们的目的是在其他主机上直接调用远程主机上mysql的数据进行使用。

以下操作可直接在远程主机进行,也可在本地主机通过 ssh 连接上远程主机后操作,都是一样的。

  • 登陆数据库,输入密码
mysql -u root -p
  • 创建用户用来远程连接
mysql> GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

(username处填写用户名,%表示所有的电脑都可以连接,也可以设置某个ip地址运行连接,password处填写密码)

  • 让命令立即生效,查询端口号,然后退出MySQL
mysql> flush privileges;
mysql> show global variables like 'port';  
mysql> exit;

如图,我查到的端口号为3306:
在这里插入图片描述

  • 找到 my.cnf 文件,将 bind-address = 127.0.0.1,设置成bind-address = 0.0.0.0(设备地址)

  • 重新启动mysql

/etc/init.d/mysql stop
/etc/init.d/mysql start
  • 设置完毕,在其他主机上尝试登录,比如用 windows 上的 navicat 试一试。

参考 Linux下mysql的远程连接

MySQL数据库目录转移问题

其实我在导入数据时还收获了意外的问题,就是在把数据导入 mysql 的过程中,发现 mysql 存储路径下的空间不够用。。。
这个问题让我差点换另一台主机从头再来,也是我删除了 30G 的数据的原因。随后我发现Linux主机目录下还空余着另一个400G盘,那我是不是可以通过修改mysql中数据的存储路径来解决问题呢?事实证明,还真有这种办法(暴风哭泣)。

具体实现我就不做解释了,直接上链接吧!

详见:
Linux下mysql修改数据库存放目录方法和可能遇到的问题
Linux(CentOS)下更改/转移MySQL数据库目录

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:精致技术 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值