3.mysql数据库多实例应用
1.mysql多实例简介:
一台机器上开启多个不同的服务端口(eg:3306,3307),运行多个mysql服务进程,这些服务进程通过不同的socket监听不同的服务来提供各自的服务。
这些mysql多实例共用一套mysql安装程序,使用不同(也可相同)的my.cnf配置文件、启动程序、数据文件。在提供服务时,多实例mysql在逻辑上看来是各自独立的,多个实例的自身是根据配置文件对应的设定值,来取得服务器的相关硬件资源多少。
多实例补充:很多服务都可以有多实例,甚至在门户网站用的很广泛,例如:nginx,apache,haproxy,redis,memcache都可以多实例。
2.mysql多实例作用:
(1)有效利用服务器资源:当单个服务器资源有剩余时可以充分利用剩余的资源提供更多服务。(服务器的占用率应该达到60%~70%)
(2)节约服务器资源:当公司资金紧张,但是数据库又需要各自尽量独立提供服务,而且需要主从同步等技术时,多实例再好不过。
3.mysql多实例问题:
资源相互抢占问题:当某个服务实例并发很高或者有慢查询时,整个实例会消耗更多的内存、CPU、磁盘IO资源,导致服务器上的其他实例提供服务的质量下降。
4.mysql多实例应用场景:
(1)资金紧张型公司的选择;
(2)并发访问不是特别大的业务;
(3)门户网站应用mysql多实例场景。
5.mysql多实例配置方案:
(1)多配置文件部署方案:即通过配置多个配置文件及多个启动程序来实现多实例的方案。(推荐)
(2)单一配置文件部署方案(缺点是耦合性太高)。
6.安装多实例mysql数据库:
[root@oldboyedu-01 ~]# yum install ncurses-devel -y
[root@oldboyedu-01 ~]# yum install libaio-devel -y
[root@oldboyedu-01 ~]# pkill mysqld
[root@oldboyedu-01 ~]# ps -ef|grep mysqld
root 24312 21730 0 17:31 pts/2 00:00:00 grep mysqld
[root@oldboyedu-01 ~]# rm -rf /etc/init.d/mysqld
[root@oldboyedu-01 ~]# mkdir -p /data/{3306,3307}/data
[root@oldboyedu-01 ~]# tree /data/
/data/ //总的多实例根目录
├── 3306 //3306实例目录
│ └── data //3306实例的数据文件
├── 3307 //3307实例目录
│ └── data //3307实例的数据文件
└── lost+found
5 directories, 0 files
说明:
生产硬件配置:MEM,32g,双CPU 8核,磁盘6*600g SAS 15k,一般生产场景就2~3个实例。
[root@oldboyedu-01 opt]# unzip data.zip
Archive: data.zip
creating: data/
creating: data/3306/
inflating: data/3306/my.cnf
inflating: data/3306/mysql
creating: data/3307/
inflating: data/3307/my.cnf
inflating: data/3307/mysql
a.创建配置文件:
[root@oldboyedu-01 opt]# cp data/3306/my.cnf /data/3306/
[root@oldboyedu-01 opt]# cp data/3307/my.cnf /data/3307/
[root@oldboyedu-01 opt]# tree /data/
/data/
├── 3306
│ ├── data
│ └── my.cnf
└── 3307
├── data
└── my.cnf
4 directories, 2 files
多实例启动文件的启动mysql服务实质:
mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 >/dev/null &
mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 >/dev/null &
多实例启动文件的(平滑)停止mysql服务实质(安全起见这里需要密码!):
mysqladmin -u root -poldboy123 -S /data/3306/mysql.sock shutdown
mysqladmin -u root -poldboy123 -S /data/3307/mysql.sock shutdown
b.创建启动文件:
[root@oldboyedu-01 opt]# cp data/3306/mysql /data/3306/
[root@oldboyedu-01 opt]# cp data/3307/mysql /data/3307/
[root@oldboyedu-01 opt]# tree /data/
/data/
├── 3306
│ ├── data
│ ├── my.cnf
│ └── mysql
└── 3307
├── data
├── my.cnf
└── mysql
4 directories, 4 files
//或者直接:
[root@oldboyedu-01 /]# unzip -o data.zip
Archive: data.zip
creating: data/
creating: data/3306/
inflating: data/3306/my.cnf
inflating: data/3306/mysql
creating: data/3307/
inflating: data/3307/my.cnf
inflating: data/3307/mysql
[root@oldboyedu-01 /]# cd
[root@oldboyedu-01 ~]# tree /data
/data
├── 3306
│ ├── data //空建
│ ├── my.cnf
│ └── mysql
└── 3307
├── data //空建
├── my.cnf
└── mysql
4 directories, 4 files
------------------------------
#my.cnf [client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-rehash [mysqld] user = mysql port = 3306 socket = /data/3306/mysql.sock basedir = /application/mysql datadir = /data/3306/data open_files_limit = 1024 back_log = 600 max_connections = 800 max_connect_errors = 3000 table_cache = 614 external-locking = FALSE max_allowed_packet =8M sort_buffer_size = 1M join_buffer_size = 1M thread_cache_size = 100 thread_concurrency = 2 query_cache_size = 2M query_cache_limit = 1M query_cache_min_res_unit = 2k #default_table_type = InnoDB thread_stack = 192K #transaction_isolation = READ-COMMITTED tmp_table_size = 2M max_heap_table_size = 2M long_query_time = 1 #log_long_format #log-error = /data/3306/error.log #log-slow-queries = /data/3306/slow.log pid-file = /data/3306/mysql.pid log-bin = /data/3306/mysql-bin relay-log = /data/3306/relay-bin relay-log-info-file = /data/3306/relay-log.info binlog_cache_size = 1M max_binlog_cache_size = 1M max_binlog_size = 2M expire_logs_days = 7 key_buffer_size = 16M read_buffer_size = 1M read_rnd_buffer_size = 1M bulk_insert_buffer_size = 1M #myisam_sort_buffer_size = 1M #myisam_max_sort_file_size = 10G #myisam_max_extra_sort_file_size = 10G #myisam_repair_threads = 1 #myisam_recover lower_case_table_names = 1 skip-name-resolve slave-skip-errors = 1032,1062 replicate-ignore-db=mysql server-id = 1 innodb_additional_mem_pool_size = 4M innodb_buffer_pool_size = 32M innodb_data_file_path = ibdata1:128M:autoextend innodb_file_io_threads = 4 innodb_thread_concurrency = 8 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 2M innodb_log_file_size = 4M innodb_log_files_in_group = 3 innodb_max_dirty_pages_pct = 90 innodb_lock_wait_timeout = 120 innodb_file_per_table = 0 [mysqldump] quick max_allowed_packet = 2M [mysqld_safe] log-error=/data/3306/mysql_oldboy3306.err pid-file=/data/3306/mysqld.pid
#mysql #init port=3306 mysql_user="root" mysql_pwd="oldboy" CmdPath="/application/mysql/bin" mysql_sock="/data/${port}/mysql.sock" #startup function function_start_mysql() { if [ ! -e "$mysql_sock" ];then printf "Starting MySQL...\n" /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null & else printf "MySQL is running...\n" exit fi } #stop function function_stop_mysql() { if [ ! -e "$mysql_sock" ];then printf "MySQL is stopped...\n" exit else printf "Stoping MySQL...\n" ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown fi } #restart function function_restart_mysql() { printf "Restarting MySQL...\n" function_stop_mysql sleep 2 function_start_mysql } case $1 in start) function_start_mysql ;; stop) function_stop_mysql ;; restart) function_restart_mysql ;; *) printf "Usage: /data/${port}/mysql {start|stop|restart}\n" esac
#my.cnf [client] port = 3307 socket = /data/3307/mysql.sock [mysql] no-auto-rehash [mysqld] user = mysql port = 3307 socket = /data/3307/mysql.sock basedir = /application/mysql datadir = /data/3307/data open_files_limit = 1024 back_log = 600 max_connections = 800 max_connect_errors = 3000 table_cache = 614 external-locking = FALSE max_allowed_packet =8M sort_buffer_size = 1M join_buffer_size = 1M thread_cache_size = 100 thread_concurrency = 2 query_cache_size = 2M query_cache_limit = 1M query_cache_min_res_unit = 2k #default_table_type = InnoDB thread_stack = 192K #transaction_isolation = READ-COMMITTED tmp_table_size = 2M max_heap_table_size = 2M #long_query_time = 1 #log_long_format #log-error = /data/3307/error.log #log-slow-queries = /data/3307/slow.log pid-file = /data/3307/mysql.pid #log-bin = /data/3307/mysql-bin relay-log = /data/3307/relay-bin relay-log-info-file = /data/3307/relay-log.info binlog_cache_size = 1M max_binlog_cache_size = 1M max_binlog_size = 2M expire_logs_days = 7 key_buffer_size = 16M read_buffer_size = 1M read_rnd_buffer_size = 1M bulk_insert_buffer_size = 1M #myisam_sort_buffer_size = 1M #myisam_max_sort_file_size = 10G #myisam_max_extra_sort_file_size = 10G #myisam_repair_threads = 1 #myisam_recover lower_case_table_names = 1 skip-name-resolve slave-skip-errors = 1032,1062 replicate-ignore-db=mysql server-id = 3 innodb_additional_mem_pool_size = 4M innodb_buffer_pool_size = 32M innodb_data_file_path = ibdata1:128M:autoextend innodb_file_io_threads = 4 innodb_thread_concurrency = 8 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 2M innodb_log_file_size = 4M innodb_log_files_in_group = 3 innodb_max_dirty_pages_pct = 90 innodb_lock_wait_timeout = 120 innodb_file_per_table = 0 [mysqldump] quick max_allowed_packet = 2M [mysqld_safe] log-error=/data/3307/mysql_oldboy3307.err pid-file=/data/3307/mysqld.pid
#mysql #init port=3307 mysql_user="root" mysql_pwd="oldboy" CmdPath="/application/mysql/bin" mysql_sock="/data/${port}/mysql.sock" #startup function function_start_mysql() { if [ ! -e "$mysql_sock" ];then printf "Starting MySQL...\n" /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null & else printf "MySQL is running...\n" exit fi } #stop function function_stop_mysql() { if [ ! -e "$mysql_sock" ];then printf "MySQL is stopped...\n" exit else printf "Stoping MySQL...\n" ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown fi } #restart function function_restart_mysql() { printf "Restarting MySQL...\n" function_stop_mysql sleep 2 function_start_mysql } case $1 in start) function_start_mysql ;; stop) function_stop_mysql ;; restart) function_restart_mysql ;; *) printf "Usage: /data/${port}/mysql {start|stop|restart}\n" esac
----------------------------------
7.授权mysql多实例服务所有启动文件mysql可执行
[root@oldboyedu-01 ~]# chown -R mysql.mysql /data
[root@oldboyedu-01 ~]# find /data -type f -name "mysql"|xargs ls -l
-rw-r--r-- 1 mysql mysql 1307 Jul 15 2013 /data/3306/mysql
-rw-r--r-- 1 mysql mysql 1307 Jul 21 2013 /data/3307/mysql
[root@oldboyedu-01 ~]# find /data -type f -name "mysql"|xargs chmod +x
[root@oldboyedu-01 ~]# find /data -type f -name "mysql"|xargs ls -l
-rwxr-xr-x 1 mysql mysql 1307 Jul 15 2013 /data/3306/mysql
-rwxr-xr-x 1 mysql mysql 1307 Jul 21 2013 /data/3307/mysql
[root@oldboyedu-01 opt]# grep "mysql" /etc/profile
export PATH=/application/mysql/bin:$PATH
8.初始化mysql多实例的数据库文件:
[root@oldboyedu-01 scripts]# ./mysql_install_db --basedir=/application/mysql --datadir=/data/3306/data --user=mysql
[root@oldboyedu-01 scripts]# ./mysql_install_db --basedir=/application/mysql --datadir=/data/3307/data --user=mysql
......
Installing MySQL system tables...
OK
Filling help tables...
OK
为何要初始化数据库:
(1)主要目的是创建基础的数据库文件,eg:生成mysql库,表等。
(2)初始化后查看对应实例数据目录:
[root@oldboyedu-01 ~]# tree /data/3306/data/
/data/3306/data/
├── mysql
│ ├── columns_priv.frm
│ ├── columns_priv.MYD
│ ├── columns_priv.MYI
│ ├── db.frm
......
[root@oldboyedu-01 ~]# tree /data/3307/data/
/data/3307/data/
├── ibdata1
├── ib_logfile0
├── ib_logfile1
├── ib_logfile2
├── mysql
│ ├── columns_priv.frm
......
9.启动mysql
[root@oldboyedu-01 ~]# /data/3306/mysql start
Starting MySQL...
[root@oldboyedu-01 ~]# /data/3307/mysql start
Starting MySQL...
[root@oldboyedu-01 ~]# netstat -lntup |grep 330 //查看启动与否
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 27896/mysqld
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 28609/mysqld
mysql故障排错多实例数据库:
若mysql服务没有起来,排查方法如下:
(1)如果发现没有显示mysql的端口,请稍微等待看看,mysql服务启动略微慢;
(2)如果还不行,查看日志:
[root@oldboyedu-01 ~]# tail /data/3306/mysql_oldboy3306.err //查看错误日志
171212 13:52:02 InnoDB: 5.5.32 started; log sequence number 0
171212 13:52:02 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
171212 13:52:02 [Note] - '0.0.0.0' resolves to '0.0.0.0';
171212 13:52:02 [Note] Server socket created on IP: '0.0.0.0'.
171212 13:52:02 [Warning] 'user' entry 'root@oldboyedu-01' ignored in --skip-name-resolve mode.
171212 13:52:02 [Warning] 'user' entry '@oldboyedu-01' ignored in --skip-name-resolve mode.
171212 13:52:02 [Warning] 'proxies_priv' entry '@ root@oldboyedu-01' ignored in --skip-name-resolve mode.
171212 13:52:02 [Note] Event Scheduler: Loaded 0 events
171212 13:52:02 [Note] /application/mysql-5.5.32/bin/mysqld: ready for connections.
Version: '5.5.32-log' socket: '/data/3306/mysql.sock' port: 3306 Source distribution
(3)细看所有执行命令返回的屏幕输出,不要忽略关键的输出内容;
(4)查看系统的/var/log/messages;
(5)如果是关联服务,要同时查看相关服务的log.
10.mysql多实例的登录
说明:登录不同实例库需要指定不同库的sock路径,这是在my.cnf里指定。默认root无密码。
[root@oldboyedu-01 ~]# mysql -S /data/3306/mysql.sock //登录3306
......
mysql>
mysql> create database d3306;
Query OK, 1 row affected (0.03 sec)
mysql> quit
Bye
[root@oldboyedu-01 ~]# mysql -S /data/3307/mysql.sock //登录3307
......
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.08 sec)
mysql> create database d3307;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| d3307 |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
mysql> system ls
anaconda-ks.cfg error.txt ett.txt install.log install.log.syslog right_error.txt right.txt
mysql> system mysql -S /data/3306/mysql.sock //从3307登录到3306
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.32-log Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| d3306 |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
mysql> quit
Bye
mysql> quit
Bye
[root@oldboyedu-01 ~]#
11.mysql多实例的关闭服务
[root@oldboyedu-01 ~]# /data/3306/mysql stop //比如3306
[root@oldboyedu-01 ~]# /data/3306/mysql start
[root@oldboyedu-01 ~]# /data/3306/mysql stop //老师的坑!
Stoping MySQL...
/application/mysql/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: YES)'
[root@oldboyedu-01 ~]# cat /data/3306/mysql |grep mysql_pwd
mysql_pwd="oldboy" //这里改成免密的mysql_pwd=""
[root@oldboyedu-01 ~]# /data/3306/mysql stop //3306可以关闭了
Stoping MySQL...
Enter password:
[root@oldboyedu-01 ~]# netstat -lntup |grep 330
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 28609/mysqld
12.初次设置密码为:oldboy123
[root@oldboyedu-01 ~]# /data/3306/mysql start
[root@oldboyedu-01 ~]# netstat -lntup |grep 330
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 29429/mysqld
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 28609/mysqld
[root@oldboyedu-01 ~]# mysqladmin -u root -S /data/3306/mysql.sock password 'oldboy123' //3306
[root@oldboyedu-01 ~]# /data/3307/mysql start
MySQL is running...
[root@oldboyedu-01 ~]# mysqladmin -u root -S /data/3307/mysql.sock password 'oldboy123' //3307
[root@oldboyedu-01 ~]# /data/3307/mysql stop
Stoping MySQL...
/application/mysql/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: YES)'
[root@oldboyedu-01 ~]# vim /data/3307/mysql
说明:
将密码mysql_pwd=""改成mysql_pwd="oldboy123"才可以stop
[root@oldboyedu-01 ~]# /data/3307/mysql stop
Stoping MySQL...
[root@oldboyedu-01 ~]# vim /data/3306/mysql
说明:
将密码mysql_pwd=""改成mysql_pwd="oldboy123"才可以stop
[root@oldboyedu-01 ~]# /data/3306/mysql stop
MySQL is stopped...
[root@oldboyedu-01 ~]# netstat -lntup |grep 330 //检查,成功关闭3306、3307服务
[root@oldboyedu-01 ~]#
安全起见则授权:
[root@oldboyedu-01 ~]# find /data -type f -name "mysql" -exec chmod 700 {} \;
[root@oldboyedu-01 ~]# find /data -type f -name "mysql" -exec chown root.root {} \;
[root@oldboyedu-01 ~]# find /data -type f -name "mysql" -exec ls -l {} \;
-rwx------ 1 root root 1310 Dec 12 14:52 /data/3306/mysql
-rwx------ 1 root root 1310 Dec 12 14:46 /data/3307/mysql
13.mysql多实例的重新启动
[root@oldboyedu-01 ~]# /data/3306/mysql start
Starting MySQL...
[root@oldboyedu-01 ~]# /data/3307/mysql start
Starting MySQL...
[root@oldboyedu-01 ~]# netstat -lntup |grep 330
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 30256/mysqld
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 30973/mysqld
[root@oldboyedu-01 ~]# ss -lntup |grep 330
tcp LISTEN 0 128 *:3306 *:* users:(("mysqld",30256,12))
tcp LISTEN 0 128 *:3307 *:* users:(("mysqld",30973,11))
[root@oldboyedu-01 ~]# netstat -lntup |grep 330
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 30256/mysqld
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 30973/mysqld
[root@oldboyedu-01 ~]# /data/3306/mysql stop
Stoping MySQL...
[root@oldboyedu-01 ~]# /data/3307/mysql stop
Stoping MySQL...
[root@oldboyedu-01 ~]# netstat -lntup |grep 330
[root@oldboyedu-01 ~]# /data/3306/mysql start //启动3306
Starting MySQL...
[root@oldboyedu-01 ~]# /data/3307/mysql start //启动3307
Starting MySQL...
[root@oldboyedu-01 ~]# netstat -lntup |grep 330
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 32481/mysqld
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 31740/mysqld
[root@oldboyedu-01 ~]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock //加密码登录3306测试!
......
mysql>
[root@oldboyedu-01 ~]# mysql -uroot -poldboy123 -h localhost -S /data/3306/mysql.sock //指定本机登录
增加mysql数据库第三个实例:
建立:
[root@oldboyedu-01 ~]# mkdir -p /data/3308/data
[root@oldboyedu-01 ~]# cp /data/3306/my.cnf /data/3308/
[root@oldboyedu-01 ~]# cp /data/3306/mysql /data/3308/
授权:
[root@oldboyedu-01 ~]# chown -R mysql.mysql /data/3308/
[root@oldboyedu-01 ~]# cd /data/3308
[root@oldboyedu-01 3308]# vim my.cnf
server-id = 4
:g/3306/s//3308/g 或者:%s/3306/3308/g
[root@oldboyedu-01 3308]# vim mysql
%s/3306/3308/g
[root@oldboyedu-01 scripts]# pwd
/application/mysql/scripts
初始化:
[root@oldboyedu-01 scripts]# ./mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/data/3308/data/
Installing MySQL system tables...
OK
Filling help tables...
OK
启动mysql数据库的3308实例:
[root@oldboyedu-01 ~]# /data/3308/mysql start
Starting MySQL...
[root@oldboyedu-01 ~]# netstat -lntup|grep 330
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 32481/mysqld
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 31740/mysqld
tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 33299/mysqld
初始设置密码:
[root@oldboyedu-01 ~]# mysqladmin -u root -S /data/3308/mysql.sock password 'oldboy123'
重新登录3308:
[root@oldboyedu-01 ~]# mysql -uroot -poldboy123 -S /data/3308/mysql.sock
......
mysql>
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql> quit
Bye
小结:
(1)以上是本地连接mysql数据库,多实例本地端登录是通过socket文件来指定具体登录到哪个实例。此文件具体位置是在mysql初始化(mysql_install_db)时指定的,在本机登录时登录程序通过socket文件来判断登录的数据库实例。
mysql.sock <== 文件是服务器与本地客户端进行通信的UNIX套接字文件
eg:mysql -uroot -poldboy123 -S /data/3308/mysql.sock
(2)远端登录是指定多实例主机中的其中一个实例,TCP/UDP端口(port)来指定所要登陆的mysql数据库,此端口是在mysql配置文件my.cnf中指定的。
端口port <==端口是一种“逻辑连接位置”,客户端程序被分派计算机上特殊程序的一种方式。
eg:[root@oldboyedu-01 ~]# mysql -uremote -p'hzcai123' -h 192.168.128.138 -P 3307
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.128.138' (111)
//远程登录别人主机:
[root@oldboyedu-01 ~]# ssh 10.0.0.94
ssh: connect to host 10.0.0.94 port 22: No route to host
[root@oldboyedu-01 ~]# 123456
浙公网安备 33010602011771号