电脑做服务器建网站,wordpress建立论坛,网站开发与维护考试题目,长沙百度文化传播有限公司一、关于linux上root连接mysql时遇到的一点小问题 今天因为工作需要#xff0c;需要使用root连接一下很久没有连接过的mysql服务器了#xff0c;一看找不到root密码了#xff0c;记得当时我在搭建整个mysql主从的时候#xff0c;我明明把root密码记录在了txt文件上的#…一、关于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
mysqlupdate mysql.user set passwordpassword(111111) where user’root’;
mysqlflush privileges; 当然我这里不需要考虑重置因为我很清楚记录我当时把这个root密码发给过团队成员于是找到邮箱发送记录找到了这个root密码事情好像完了可以使用这个密码一登录发现登录不上
[onlineOSER13 ~]$ sudo mysql -u root -h 192.168.162.16 -p
Enter password:
ERROR 1045 (28000): Access denied for user root192.168.162.16 (using password: YES) 纳闷了这个密码是绝对没有问题的除非只有一种情况那就是团队同事修改了密码但这我相信是不可能的但眼前的现实又让我不得不怀疑于是我开始进行了其它的尝试
[onlineOSER13 ~]$ sudo mysql -h 127.0.0.1 -u root -p
Enter password:
ERROR 2003 (HY000): Cant connect to MySQL server on 127.0.0.1 (111) 竟然找不到127.0.0.1的MySQL server可以查看配置文件/etc/my.cnf里确实有看到配置
datadir /opt/data/mysql
bind-address127.0.0.1
bind-address192.168.162.16 通过netstat查看端口发现也确实没有看到127.0.0.1上的3306在监听
[onlinedevBFG-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-address127.0.0.1也是白写了。回到mysql的连接上来现在mysql怎么连接呢127.0.0.1根本没有服务192.168.162.16从现在来看问题就是没有配置这个root/host的密码。所以现在只能通过localhost连接了
[onlinedevBFG-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更方便。比如
#从远程同步到本地
[root123 ~]# rsync -avzP -e ssh 114.215.80.214:/root/c.txt ./
root114.215.80.214s password:
receiving incremental file list
c.txt63691 100% 60.74MB/s 0:00:00 (xfer#1, to-check0/1)sent 30 bytes received 14341 bytes 2210.92 bytes/sec
total size is 63691 speedup is 4.43
#从本地同步到远程
[root123 ~]# rsync -avz -e ssh ./num.php 114.215.80.214:/root/
root114.215.80.214s 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的端口传输
[root123 ~]# 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-fileFILE --password-fileFILE 可以让rsync从FILE文件中得到密码字符串从而实现。但是这会有安全问题就相当于暴露了目标服务器的密码。
方法2通过ssh公钥的方式 在本机执行rsync命令的机器生成一个ssh公钥然后将内容存放在远程机器上。先在要执行的rsync机器上查看id_rsa.pub文件是否存在然后利用ssh-keygen生成此文件将内容传到目标机器上存放在/用户/.ssh/下并更名为authorized_keys当然如果这个authorized_keys文件存在则可以追加到这个文件的后面。
#密钥验证的实现
[rootiZ282iltjiwZ ~]# ll /root/.ssh/id_rsa.pub
ls: cannot access /root/.ssh/id_rsa.pub: No such file or directory
#也可以使用ssh-keygen -t rsa
[rootiZ282iltjiwZ ~]# 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 rootiZ282iltjiwZ
The keys randomart image is:
--[ RSA 2048]----
| |
| |
| . |
| . . |
| S o . |
| * . * . |
| o .*.E |
| . ..o |
| o |
-----------------
[rootiZ282iltjiwZ ~]# ll /root/.ssh/id_rsa.pub
-rw-r--r-- 1 root root 399 Sep 21 10:41 /root/.ssh/id_rsa.pub
#完成将密钥文件放到目标服务器后再执行文件传输时会发现不会再提示密码输入了
[root123 ~]# 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
[root123 ~]#