您的位置:首页 > 数据库 > MySQL

mysql -h localhost vs -h 127.0.0.1

2016-04-14 08:28 513 查看
mysql> status;

--------------

mysql  Ver 14.14 Distrib 5.6.28, for Linux (x86_64) using  EditLine wrapper

Connection id:          7033

Current database:       mysql

Current user:           root@localhost

SSL:                    Not in use

Current pager:          stdout

Using outfile:          ''

Using delimiter:        ;

Server version:         5.6.28-log MySQL Community Server (GPL)

Protocol version:       10

Connection:             Localhost via UNIX socket

Server characterset:    latin1

Db     characterset:    latin1

Client characterset:    utf8

Conn.  characterset:    utf8

UNIX socket:            /var/lib/mysql/mysql.sock

Uptime:                 10 hours 12 min 30 sec

Threads: 16  Questions: 231173  Slow queries: 0  Opens: 312  Flush tables: 1  Open tables: 305  Queries per second avg: 6.290

--------------

mysql> select user(),current_user();

+----------------+----------------+

| user()         | current_user() |

+----------------+----------------+

| root@localhost | root@localhost |

+----------------+----------------+

1 row in set (0.00 sec)

mysql> status

--------------

mysql  Ver 14.14 Distrib 5.6.28, for Linux (x86_64) using  EditLine wrapper

Connection id:          3712

Current database:       test

Current user:           root@localhost

SSL:                    Not in use

Current pager:          stdout

Using outfile:          ''

Using delimiter:        ;

Server version:         5.6.28-log MySQL Community Server (GPL)

Protocol version:       10

Connection:             127.0.0.1 via TCP/IP

Server characterset:    latin1

Db     characterset:    latin1

Client characterset:    utf8

Conn.  characterset:    utf8

TCP port:               3306

Uptime:                 10 hours 12 min 37 sec

Threads: 16  Questions: 231205  Slow queries: 0  Opens: 312  Flush tables: 1  Open tables: 305  Queries per second avg: 6.290

--------------

mysql> select user(),current_user();

+----------------+----------------+

| user()         | current_user() |

+----------------+----------------+

| root@localhost | root@127.0.0.1 |

+----------------+----------------+

1 row in set (0.00 sec)

FYI : mysql reference 5.6

After a successful connection, 

USER() function should indicate the connecting client user and host name

CURRENT_USER() should indicate the account whose privileges apply during the session.

如果通过 TCP/IP 方式进来的连接,MYSQL服务器接收到的来源主机是 127.0.0.1;

如果是 UNIX socket 方式,MYSQL服务器接收到的来源主机是 localhost。

如果MYSQL服务器开启了 skip_name_resolve,MYSQL服务器就不会把接收到的 IP 地址转化为域名,所以前者的user就是 root@'127.0.0.1',后者的user就是 root@'localhost'。

如果按照MYSQL的默认配置,skip_name_resovle 是OFF,MYSQL服务器就会将 127.0.0.1 转换为 localhost,那么前者和后者两种连接的 user 都是 root@'localhost'

为什么要这么设计?

本质是为了使用本地更快速的连接 :使用 unix domain socket

1.Differs between Windows and Linux. If you use a unix domain socket it'll be slightly faster than using TCP/IP (because of the less overhead you have).

2.Windows is using TCP/IP as a default, whereas Linux tries to use a Unix Domain Socket if you choose localhost and TCP/IP if you take 127.0.0.1.

 skip_name_resolve 缺省是进行域反向解析

mysql> show variables like '%skip%';

+------------------------+-------+

| Variable_name          | Value |

+------------------------+-------+

| skip_external_locking  | ON    |

| skip_name_resolve      | OFF   |

| skip_networking        | OFF   |

| skip_show_database     | OFF   |

| slave_skip_errors      | OFF   |

| sql_slave_skip_counter | 0     |

+------------------------+-------+

6 rows in set (0.00 sec)

 skip_name_resolve 参数是否启用只会影响 select user()的结果。即当前会话连接用户,

因为当启用name_resolve 时 mysql 会将127.0.0.1 转化为域名信息

mysql> status;

--------------

mysql  Ver 14.14 Distrib 5.6.28, for Linux (x86_64) using  EditLine wrapper

Connection id:          14

Current database:

Current user:           root@localhost

SSL:                    Not in use

Current pager:          stdout

Using outfile:          ''

Using delimiter:        ;

Server version:         5.6.28-log MySQL Community Server (GPL)

Protocol version:       10

Connection:             Localhost via UNIX socket

Server characterset:    latin1

Db     characterset:    latin1

Client characterset:    utf8

Conn.  characterset:    utf8

UNIX socket:            /var/lib/mysql/mysql.sock

Uptime:                 13 sec

Threads: 14  Questions: 96  Slow queries: 0  Opens: 98  Flush tables: 1  Open tables: 91  Queries per second avg: 7.384

--------------

mysql>  show variables like '%skip%';

+------------------------+-------+

| Variable_name          | Value |

+------------------------+-------+

| skip_external_locking  | ON    |

| skip_name_resolve      | ON    |

| skip_networking        | OFF   |

| skip_show_database     | OFF   |

| slave_skip_errors      | OFF   |

| sql_slave_skip_counter | 0     |

+------------------------+-------+

6 rows in set (0.00 sec)

mysql> select user(),current_user();

+----------------+----------------+

| user()         | current_user() |

+----------------+----------------+

| root@localhost | root@localhost |

+----------------+----------------+

1 row in set (0.00 sec)

mysql> show variables like '%skip%';

+------------------------+-------+

| Variable_name          | Value |

+------------------------+-------+

| skip_external_locking  | ON    |

| skip_name_resolve      | ON    |----跳过域名解析

| skip_networking        | OFF   |

| skip_show_database     | OFF   |

| slave_skip_errors      | OFF   |

| sql_slave_skip_counter | 0     |

+------------------------+-------+

6 rows in set (0.00 sec)

skip_name_resolve 对远程连接状态显示的影响:

------- skip_name_resolve 状态 on:

C:\Users\hlj>mysql -h 10.80.18.237 -uroot -p

Enter password: *****

mysql> status;

--------------

mysql  Ver 14.14 Distrib 5.6.24, for Win64 (x86_64)

Connection id:          23

Current database:

Current user:           root@10.80.7.161

SSL:                    Not in use

Using delimiter:        ;

Server version:         5.6.28-log MySQL Community Server (GPL)

Protocol version:       10

Connection:             10.80.18.237 via TCP/IP

Server characterset:    latin1

Db     characterset:    latin1

Client characterset:    gbk

Conn.  characterset:    gbk

TCP port:               3306

Uptime:                 6 min 48 sec

Threads: 15  Questions: 1272  Slow queries: 0  Opens: 98  Flush tables: 1  Open tables: 91  Queries per second avg: 3.117

--------------

mysql> select user(),current_user();

+------------------+----------------+

| user()           | current_user() |

+------------------+----------------+

| root@10.80.7.161 | root@%         |

+------------------+----------------+

1 row in set (0.00 sec)

---- skip_name_resolve 状态 OFF

C:\Users\hlj>mysql -h 10.80.18.237 -uroot -p

mysql> status;

--------------

mysql  Ver 14.14 Distrib 5.6.24, for Win64 (x86_64)

Connection id:          6

Current database:

Current user:           root@10.80.7.161

SSL:                    Not in use

Using delimiter:        ;

Server version:         5.6.28-log MySQL Community Server (GPL)

Protocol version:       10

Connection:             10.80.18.237 via TCP/IP

Server characterset:    latin1

Db     characterset:    latin1

Client characterset:    gbk

Conn.  characterset:    gbk

TCP port:               3306

Uptime:                 11 sec

Threads: 10  Questions: 51  Slow queries: 0  Opens: 74  Flush tables: 1  Open tables: 67  Queries per second avg: 4.636

--------------

mysql> select user(),current_user();

+------------------+----------------+

| user()           | current_user() |

+------------------+----------------+

| root@10.80.7.161 | root@%         |

+------------------+----------------+

1 row in set (0.00 sec)

mysql> show variables like '%skip%';

+------------------------+-------+

| Variable_name          | Value |

+------------------------+-------+

| skip_external_locking  | ON    |

| skip_name_resolve      | OFF   |

| skip_networking        | OFF   |

| skip_show_database     | OFF   |

| slave_skip_errors      | OFF   |

| sql_slave_skip_counter | 0     |

+------------------------+-------+

6 rows in set (0.00 sec)

进行name_resolve 时 ,无非就是在 mysql 的error log中记录一条warning 信息:

/var/lib/mysql/centos7.err

2016-04-13 20:45:44 12730 [Warning] IP address '10.80.7.161' could not be resolved: Name or service not known

一般建议设置skip_name_resolve  =on ,不进行反向解析。可以节省一定的mysql系统资源
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: