mysql连接方式二
今天弄了下mysql的几个安全设置: 只允许本地登录,允许ssh通过远程登录
1.my.cnf
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进行连接
2.mysql 设置好了,只允许本地登录。但是允许通过ssh远程登录
原理:无论是windows还是 linux,第一步就是本地与mysql服务器建立一个ssl tunnel,
linux如下:
参数解释
-C 使用压缩功能,是可选的,加快速度。
-P 用一个非特权端口进行出去的连接。
-f 一旦SSH完成认证并建立port forwarding,则转入后台运行。
-N 不执行远程命令。该参数在只打开转发端口时很有用(V2版本SSH支持)
1)如果是windows 下用navicat for mysql 之类的数据库管理软件,比较简单,
在"常规"选项卡填写主机名为localhost或127.0.0.1,远程数据库的账号和密码
"SSH"选项卡填写远程服务器的主机名和ssh端口号,及登录的用户和密码,测试连接是否成功
2)windows 暂时没找出类似
命令安静模式下建立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下比较简单,可参看以下
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)]>