当前位置: 首页 > news >正文

关于linux上root连接mysql时遇到的一点小问题以及rsync通过ssh的文件同步传输以及免密码传输的实现

一、关于linux上root连接mysql时遇到的一点小问题

    今天因为工作需要,需要使用root连接一下很久没有连接过的mysql服务器了,一看找不到root密码了,记得当时我在搭建整个mysql主从的时候,我明明把root密码记录在了txt文件上的,不知道怎么回事这个文件上的那行账号密码不见了。是不是就没有撤了呢?root密码是可以重置的,可以使用以下命令进行密码重置:

#sudo /etc/init.d/mysql stop 
#sudo /opt/modules/mysql/bin/mysqld_safe –skip-grant-tables & 
#sudo mysql -uroot -p 
mysql>update mysql.user set password=password('111111') where user=’root’; 
mysql>flush privileges; 

    当然我这里不需要考虑重置,因为我很清楚记录我当时把这个root密码发给过团队成员,于是找到邮箱发送记录找到了这个root密码,事情好像完了,可以使用这个密码一登录发现登录不上:

[online@OSER13 ~]$ sudo mysql -u root -h 192.168.162.16 -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'192.168.162.16' (using password: YES)

     纳闷了,这个密码是绝对没有问题的,除非只有一种情况,那就是团队同事修改了密码,但这我相信是不可能的!但眼前的现实又让我不得不怀疑,于是我开始进行了其它的尝试

[online@OSER13 ~]$ sudo mysql -h 127.0.0.1 -u root -p             
Enter password: 
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)

      竟然找不到127.0.0.1的MySQL server,可以查看配置文件/etc/my.cnf里确实有看到配置:

datadir = /opt/data/mysql
bind-address=127.0.0.1
bind-address=192.168.162.16

         通过netstat查看端口发现也确实没有看到127.0.0.1上的3306在监听:

[onlinedev@BFG-OSER-4414 ~]$ netstat -anp | grep 3306
(No info could be read for "-p": geteuid()=30548 but you should be root.)
tcp        0      0 192.168.162.16:3306         0.0.0.0:*                   LISTEN      -                   
..... 

     于是我又找了一下bind-address配置的事情,因为我原来在配置的时候看到网上有说mysql可以绑定多个IP,换行写bind-address即可.但从这里来看,这个并没有起作用。看到mysql的bind-address是不允许配置多个IP的,mysql官方明确指出bind-adress只允许制定一个参数。这样来看bind-address的配置算是被验证了,上面这行bind-address=127.0.0.1也是白写了。回到mysql的连接上来,现在mysql怎么连接呢?127.0.0.1根本没有服务,192.168.162.16从现在来看问题就是没有配置这个root/host的密码。所以现在只能通过localhost连接了,

[onlinedev@BFG-OSER-4413 ~]$ sudo mysql -h localhost -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
mysql> status
--------------
mysql  Ver 14.14 Distrib 5.6.33
Connection:             Localhost via UNIX socket

        可以看到通过localhost终于连接进来,我还以为真有人在搞坏事把root密码改了呢,进入到mysql里查看一下账号,发现确实root没有配置host为192.168.162.16的密码,导致进入不了。

mysql> select  user,host,password from user;
+----------+---------------+-------------------------------------------+
| user     | host          | password                                  |
+----------+---------------+-------------------------------------------+
| root     | localhost     | *4...5 |
| root     | 127.0.0.1     | *4...5 |
......
+----------+---------------+-------------------------------------------+
5 rows in set (0.00 sec)

     另外查了一下mysql -h localhost和mysql -h 127.0.0.1的区别,通过localhost连接到mysql是使用UNIX socket,而通过127.0.0.1连接到mysql是使用TCP/IP。上面的Connection项里可以看到值为Localhost via UNIX socket,而如果是通过127.0.0.1进来Connection的值为127.0.0.1 via TCP/IP。

二、rsync通过ssh的文件同步传输以及免密码传输的实现

    通常rsync有两种传输方案,一种是rsync-daemon方式,也就是在目标机器上安装rsync服务端,设置账号密码及传输目录,然后客户端使用rsync及账号密码传输即可。此时的密码是写在密码文件里(其它用户不可访问),详见:Shell脚本中应用 Rsync 保持两服务器间文件几秒内同步 及 rsync实现服务器间文件同步的正确用法_shell rsync-CSDN博客

    另一种方式为ssh,有时使用ssh更方便。比如:

#从远程同步到本地:
[root@123 ~]# rsync -avzP -e ssh 114.215.80.214:/root/c.txt ./          
root@114.215.80.214's password: 
receiving incremental file list
c.txt63691 100%   60.74MB/s    0:00:00 (xfer#1, to-check=0/1)sent 30 bytes  received 14341 bytes  2210.92 bytes/sec
total size is 63691  speedup is 4.43
#从本地同步到远程:
[root@123 ~]# rsync -avz -e ssh ./num.php 114.215.80.214:/root/
root@114.215.80.214's password: 
sending incremental file list
num.phpsent 150 bytes  received 31 bytes  8.42 bytes/sec
total size is 105  speedup is 0.58
#指定ssh的端口传输
[root@123 ~]# rsync -avz -e 'ssh -p 20000' ./num.php 114.215.80.214:/root/

     rsync的-a选项很好用,且功能非常强大,一般传文件有-avz选项就够了,如果要传递目录,加上-r选项,保持软链接加上-l选项,加上大写的P选项保留那些因故没有完全传输的文件,以加快随后的再次传输。另外在使用ssh时候,默认用的是ssh的22端口,如果服务器的ssh不是22端口的话,则需要加选项-p指定端口。如上面的指定ssh的端口传输示例。rsync的更多参数见:关于linux下grep --color自定义高亮颜色的处理以及基于ssh的rsync服务器间文件同步功能及与基于rsync服务端的区别-CSDN博客

        但在上面的执行过程中有一个麻烦就是要每次输入密码,在终端上命令执行时还能行,但是如果是放在脚本或者是定时任务里执行的话可就不行了。这时也是有办法的:

办法1:通过rsync的一个参数--password-file=FILE 

        --password-file=FILE 可以让rsync从FILE文件中得到密码字符串从而实现。但是这会有安全问题,就相当于暴露了目标服务器的密码。

方法2:通过ssh公钥的方式

    在本机(执行rsync命令的机器)生成一个ssh公钥,然后将内容存放在远程机器上。先在要执行的rsync机器上查看id_rsa.pub文件是否存在,然后利用ssh-keygen生成此文件,将内容传到目标机器上存放在/用户/.ssh/下并更名为authorized_keys,当然如果这个authorized_keys文件存在,则可以追加到这个文件的后面。

#密钥验证的实现:
[root@iZ282iltjiwZ ~]# ll  /root/.ssh/id_rsa.pub
ls: cannot access /root/.ssh/id_rsa.pub: No such file or directory
#也可以使用ssh-keygen -t rsa
[root@iZ282iltjiwZ ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
f4:a2:2d:59:7e:b5:a3:d1:f0:7a:67:92:d2:9e:09:7d root@iZ282iltjiwZ
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|        .        |
|       . .       |
|        S o .    |
|       * . * .   |
|      + o +.*.E  |
|       . ..===o  |
|          o+++   |
+-----------------+
[root@iZ282iltjiwZ ~]# ll  /root/.ssh/id_rsa.pub
-rw-r--r-- 1 root root 399 Sep 21 10:41 /root/.ssh/id_rsa.pub
#完成将密钥文件放到目标服务器后再执行文件传输时会发现不会再提示密码输入了:
[root@123 ~]# rsync -avz -e ssh ./z.log  114.215.80.214:/root/
sending incremental file list
z.log
sent 1137 bytes  received 37 bytes  782.67 bytes/sec
total size is 2507  speedup is 2.14
[root@123 ~]# 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++系列-多态的基本语法
  • 【Linux —— 生产者消费者模型】
  • 47.【C语言】指针(重难点)(J)
  • 【渗透测试】ATTCK靶场一,phpmyadmin,域渗透,内网横向移动攻略
  • Unity动画模块 之 动画层混合
  • 我要做全栈:自学前端第一天
  • Go开发桌面客户端软件小试:网站Sitemap生成
  • client网络模块的开发和client与server端的部分联动调试
  • 流体力学解迷宫
  • 【ZYNQ MPSoC开发】PS裸机多核程序的固化
  • 计算机毕业设计选题推荐-体育馆场地预约系统-Java/Python项目实战
  • 学习MyBatis-Plus
  • (一) 初入MySQL 【认识和部署】
  • 【C语言从不挂科到高绩点】02-变量、数据类型、标识符、关键字
  • C的温故而知新:位操作(C Primer Plus第十五章)
  • .pyc 想到的一些问题
  • 30秒的PHP代码片段(1)数组 - Array
  • FastReport在线报表设计器工作原理
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JS实现简单的MVC模式开发小游戏
  • Python语法速览与机器学习开发环境搭建
  • sessionStorage和localStorage
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • text-decoration与color属性
  • 构建工具 - 收藏集 - 掘金
  • 什么是Javascript函数节流?
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 微信小程序实战练习(仿五洲到家微信版)
  • 用Visual Studio开发以太坊智能合约
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • postgresql行列转换函数
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • #知识分享#笔记#学习方法
  • $.ajax,axios,fetch三种ajax请求的区别
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (7)摄像机和云台
  • (javaweb)Http协议
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (solr系列:一)使用tomcat部署solr服务
  • (TOJ2804)Even? Odd?
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (二十六)Java 数据结构
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转载)利用webkit抓取动态网页和链接
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .form文件_SSM框架文件上传篇