mysql连接方式二

minggehenhao 2020-06-02

今天弄了下mysql的几个安全设置: 只允许本地登录,允许ssh通过远程登录

1.my.cnf

#skip-networking
bind-address = 127.0.0.1


此项设置允许 tcp/ip 访问,但是只有127.0.0.1 有可以访问,如果把skip-networking 开启。则只能通过sock连接。
顺便提下,

mysql -h localhost -u eric -p saker

mysql -h 127.0.0.1 -u eric -p saker

这两个命令在skip-networking 开启的时候localhost能正常登录mysql,但是127.0.0.1不能。具体原因如下:

大多数程序将主机名localhost和IP地址127.0.0.1 视作“本地服务器”的同义词。

但在UNIX系统中,MySQL 有所不同:
出现localhost时,MySQL会尝试使用一个Unix domain socket 文件来连接本地服务器。

要强制使用TCP/IP连接到本地服务器,那就使用IP地址 127.0.0.1 而不是主机名localhost。
可以通过指定 --protocol=tcp 选项来强制使用TCP/IP进行连接

TCP/IP 连接的默认端口号是 3306.


2.mysql 设置好了,只允许本地登录。但是允许通过ssh远程登录
原理:无论是windows还是 linux,第一步就是本地与mysql服务器建立一个ssl tunnel,

利用ssh命令在本机开个33xx的端口,这个端口为隧道的入口端口,出口就是数据库的3306(如果默认端口没被修改的话),
linux如下:
ssh -NCPf -L 3388:mysqlserver:3306

参数解释

-C    使用压缩功能,是可选的,加快速度。 
-P    用一个非特权端口进行出去的连接。 
-f    一旦SSH完成认证并建立port forwarding,则转入后台运行。 
-N    不执行远程命令。该参数在只打开转发端口时很有用(V2版本SSH支持)

1)如果是windows 下用navicat for mysql 之类的数据库管理软件,比较简单,
在"常规"选项卡填写主机名为localhost或127.0.0.1,远程数据库的账号和密码
"SSH"选项卡填写远程服务器的主机名和ssh端口号,及登录的用户和密码,测试连接是否成功
2)windows 暂时没找出类似

ssh -NCPf -L 3388:mysqlserver:3306

命令安静模式下建立ssh tunnel。 我用了putty试了下。连接可以成功。呆后续研究

3.mysql 主从备份使用ssh tunnel,下面摘自别人文章,待验证

1). 备份初始数据。
关闭所有相关的数据更新操作程序,或者对要备份的数据库加锁,避免更新,然后用 tar 备份到从服务器上。或者可以用mysqlhotcopy。
2). 需要在主服务器上,配置日志功能
这需要重启服务,使其启用日志功能。配置文件 my.cnf 可以放在 mysql 的安装目录中。
[mysqld] server-id=1 log-bin=mydb-bin binlog-do-db=mydb
重启服务后,可以在数据目录下,看见该数据库的日志文件,并且可以通过 "show master status",查看到主服务器的状态。
3). 设置备用用户
mysql>GRANT REPLICATION SLAVE ON *.* TO ‘localhost‘ IDENTIFIED BY ‘backup‘;
这里之所以用本地连接,是因为后面采用 ssh 隧道连接 mysql
4). 设置从服务器
[mysqld] server-id=2 master-host=127.0.0.1 master-port=3307 master-user=backup master-password=backup master-connect-retry=10 report-host=127.0.0.1
5). 远程连接隧道
ssh -f -N -4 -L 3307:127.0.0.1:3306
6). 启动从服务器
可以通过 "show processlist",查看备份情况。并且可以查看mysql的错误日志,了解是否连接正常,同步备份功能是否工作正常。

4.因为使用yii框架在写一个项目,所以远程mysql禁止直接登录后,yii的配置文件也要相应修改,linux下比较简单,可参看以下

http://www.yiiframework.com/forum/index.php/topic/30678-mysql-through-ssh-tunnel/
windows待续......
 
 
 
 
 
 
 
敲命令验证:
mysql -uroot -h127.0.0.1 -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.5.47-log MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.

MySQL [(none)]> quit
Bye

 ~
mysql -uroot -hlocalhost -p
Enter password:
ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/run/mysql.sock‘ (2)

 ~
mysql --protocol=tcp -uroot -hlocalhost -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.5.47-log MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.

MySQL [(none)]> quit
Bye

 ~
mysql --protocol=tcp -uroot -hlocalhost -p‘******‘
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.5.47-log MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.

MySQL [(none)]>

相关推荐