before
本篇介绍,MySQL连接的不同方式和初始化的一些参数配置及如何配置多实例。
连接参数
前文中已经说过,MySQL支持socket和TCP/IP
两种连接方式。
[root@cs mysql]# mysql -uroot -p -S /tmp/mysql.sock
Enter password:
-S
指定socket来连接;一般我们不加-S
就可以登录到MySQL中,是因为MySQL使用的socket文件默认的存放在/tmp/mysql.sock
中,或者你在配置文件中指定,这样我们不指定也能找到socket文件。另外,一般使用socket登录都是本地登录,所以,你要保证你的登录用户是有localhost
的权限的。
而使用TCP/IP
的方式就是:
[root@cs mysql]# mysql -uroot -p -h192.168.85.133 -P3306
Enter password:
其他常用的参数:
参数 | 描述 | 备注 |
---|---|---|
-u | 登录用户名(账号) | |
-p | 登录密码 | |
-h | 登录IP | |
-P | 登录端口 | |
-S | 指定socket文件登录 | |
-e | 免交互执行命令 | 也就是不用登录进去就可以执行一些简单的命令并返回结果 |
< | 导入并执行外部的SQL脚本 |
PS:
- 参数和值之间可以挨着也可以空格分割。
- 如果
TCP/IP
和socket连接同时使用,默认TCP/IP
方式优先。
[root@cs mysql]# mysql -uzhangkai -p -h 192.168.85.133 -P3306 -S /tmp/mysql.sock
Enter password:
mysql> show processlist;
+----+----------+----------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+----------+----------+------+---------+------+----------+------------------+
| 7 | zhangkai | cs:59128 | NULL | Query | 0 | starting | show processlist |
+----+----------+----------+------+---------+------+----------+------------------+
1 row in set (0.00 sec)
如果是本地连接远程服务器上MySQL的话,就这个命令就行了:
mysql -uzhangkai -p123 -h 192.168.85.133 -P3306 --ssl-mode=DISABLED
# 注意
# 1. 账号必须具有远程访问的权限
# 2. 云服务器必须放开3306端口
# 3. 关于--ssl-mode=DISABLED,就是禁用ssl连接
# 参考官档,https://dev.mysql.com/doc/refman/8.0/en/connection-options.html#option_general_ssl-mode
在外部执行MySQL的内部命令,如shell脚本中,可以使用-e
参数:
[root@cs mysql]# mysql -uzhangkai -p123 -h 192.168.85.133 -P3306 -e "show processlist;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----+----------+----------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+----------+----------+------+---------+------+----------+------------------+
| 8 | zhangkai | cs:59130 | NULL | Query | 0 | starting | show processlist |
+----+----------+----------+------+---------+------+----------+------------------+
-e
后跟双引号,引号内可以写想要执行的命令。
如果有一些SQL脚本要执行,可以使用<
符号来处理,首先准备一个data.sql
文件,文件内容如下:
create database data_test;
然后导入到数据库中即可:
[root@cs home]# ls
data.sql
[root@cs home]# cat data.sql
create database data_test;
[root@cs home]# mysql -uroot -p <data.sql
Enter password:
[root@cs home]# mysql -uroot -p -e"show databases;"
Enter password:
+--------------------+
| Database |
+--------------------+
| information_schema |
| data_test |
| mysql |
| performance_schema |
| sys |
+--------------------+
此时,我们可以查询到SQL脚本创建的data_test
数据库了。
多种启动方式
如上图,在centos6中,我们可以通过service
来调用mysql.server
脚本来启动MySQL,而mysql.server
脚本内部会调用mysqld_safe
脚本来调用mysqld
这个启动程序脚本来 启动MySQL服务。mysqld_safe
的作用是监控mysqld
的运行状态。我们也可以通过./bin/mysqld_safe &
临时启动mysqld_safe
来完成一些操作。
另外在centos7中,可以直接是使用systemctl
来直接调用mysqld
启动MySQL,而且centos7中也可以配置service
的启动方式。
当然,无论是systemctl
,还是service
的启动方式,都是相对固定的start
、stop
这些操作,那有些情况下需要临时维护或者做其他的操作,就需要用到mysqld_safe
模式或者直接启动mysqld
了。
初始化配置
初始化配置的目的是:干预MySQL的启动,或者干预客户端的连接,说白了就是让MySQL按照我们的意愿来启动。
初始化配置都有哪些方法:
- 预编译,这个方法可以pass掉了,因为我们一般都是下载二进制的源码包。
- 配置文件,也就是
/etc/my.cnf
文件,适用于所有的启动方式。 - 命令行,直接在命令行启动时添加各种参数,当然,这种参数仅限于
mysqld_safe、mysqld
这两种方式。
综上所述,推荐使用配置文件的的方式来做数据库初始化启动。
先来看,MySQL在启动时,都(默认)读取了哪些配置文件:
[root@cs ~]# mysqld --help --verbose | grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default
如果多个配置文件有相同的参数,那就会以最后读取到的为准,也就是~/.my.cnf
文件为准。但是如果启动时加入--defaults=/etc/my.cnf
时,会以你defaults
d的路径为准,其他的文件就不读取了。
配置文件的介绍
[标签]
配置项=xxxx
# 标签的类型主要包括,服务端和客户端的定义
# 服务端包括以下几类:
[mysqld]
[mysqld_safe]
[server] # 所有服务端的统称,不过不建议使用
# 客户端包括:
[mysql]
[mysqldump] # 备份用
[client]
# 来个示例
[root@cs ~]# cat /etc/my.cnf
[mysqld]
user=mysql # mysql工作时的用户
basedir=/opt/mysql # mysql所在的目录,必须设定的参数
datadir=/data/mysql # mysql数据存放的目录,必须设定的参数
server_id=6
port=3306
socket=/tmp/mysql.sock # 服务器端socket所在路径
log_error=/data/mysql/mysql.log # 错误日志
[mysql]
socket=/tmp/mysql.sock # 必须参数
# prompt=3306 [\\d]> # 提示符
# user=root # 登录的用户名和密码,这里不建议用,不安全
# password=123
需要补充的是,带下划线的参数,如server_id
,在MySQL5.5版本以前可以写成中横线的形式,但是中横线这种方式存在问题,所以后续版本都统一使用下划线这种连接方式(当然,为了兼容,也支持中横线的形式)。
另外,关于socket可能的报错,就是找不到socket文件,该报错的原因:
- 数据库没启动,没启动没有生成socket文件。
- 启动时,指定的socket文件路径不对,也可能是配置文件中的路径写错了。
server_id
参数,主从复制用,可以简单理解在MySQL5.7以后必加的一个参数,值是1~65535
之间的任意数字,并且跟其他的实例区分开。
关于prompt
参数参考:<https://www.cnblogs.com/Neeo/articles/13524954.html#%E5%85%B3%E4%BA%8Eprompt%E5%8F%82%E6%95%B0>
欢迎斧正,that's all