Intro
- 查看MySQL版本和当前的port端口号
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.19 |
+-----------+
1 row in set (0.00 sec)
mysql> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
1 row in set (0.00 sec)
mysql>
- 在MySQL安装目录下查找有无配置文件和相关目录
wuyujin@ubuntu18:/opt/mysql8$ ll
total 444K
drwxr-xr-x 10 wuyujin root 4.0K 3月 4 20:12 ./
drwxr-xr-x 17 root root 4.0K 3月 14 09:50 ../
drwxr-xr-x 2 wuyujin 31415 4.0K 12月 10 07:32 bin/
drwxr-x--- 7 wuyujin wuyujin 4.0K 4月 5 10:50 data/
drwxr-xr-x 2 wuyujin 31415 4.0K 12月 10 07:32 docs/
drwxr-xr-x 3 wuyujin 31415 4.0K 12月 10 07:32 include/
drwxr-xr-x 6 wuyujin 31415 4.0K 12月 10 07:32 lib/
-rw-r--r-- 1 wuyujin 31415 397K 12月 10 03:53 LICENSE
drwxr-xr-x 4 wuyujin 31415 4.0K 12月 10 07:32 man/
-rw-r--r-- 1 wuyujin 31415 687 12月 10 03:53 README
drwxr-xr-x 28 wuyujin 31415 4.0K 12月 10 07:32 share/
drwxr-xr-x 2 wuyujin 31415 4.0K 3月 4 20:17 support-files/
wuyujin@ubuntu18:/opt/mysql8$
别说my.cnf
,连conf
目录都没有的。
- 在
/etc
目录下查找有无配置文件和相关目录
wuyujin@ubuntu18:~$ ll /etc | grep my.cnf
wuyujin@ubuntu18:~$ ll /etc | grep mysql
wuyujin@ubuntu18:~$
也没有,那么我要如何自己指定MySQL监听的端口号呢?
查询
./bin/mysqld --help --verbose
查看mysqld服务端(daemon
)的帮助信息。
可以看到其中关于端口的选项:
-P, --port=# Port number to use for connection or 0 to default to,
my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default
(3306), whatever comes first
说了几点:
- 默认监听3306端口;
- 可以在my.cnf
配置文件中配置(/etc/my.cnf
或$MYSQL_HOME/conf/my.cnf
)
- 可以通过环境变量$MYSQL_TCP_PORT
设置
- 可以通过/etc/services
工具设置
我选择设置环境变量MYSQL_TCP_PORT
的方式,自定义MySQL服务器监听端口。
我设置了这个环境变量,也使之生效,重启MySQL服务器后,端口依旧是3306。
本质
MySQL的两个最重要的命令工具:
- $MYSQL_HOME/bin/mysql.ere
mysql客户端,可以用它登录MySQL,查看数据库,表,写SQL完成数据的增删改查。
- $MYSQL_HOME/bin/mysql.exe
mysql服务器端(daemon,守护进程),启动MySQL实际上就是运行mysqld,并同时设置好参数
在Windows系统中,可执行(executable)的程序工具以.exe
为后缀。
而在Linux中,文件后缀名只是一个标示,可以友好的提示我们这个文件的类型。
但其实不需要文件后缀名
也可以。
所以在Linux中,MySQL的这两个命令就变成了:
- $MYSQL_HOME/bin/mysql
- $MYSQL_HOME/bin/mysqld
所以:想办法给调用mysqld
的命令中,加入参数--port 想要的端口号
即可。
$MYSQL_HOME/support-files/mysql.server
脚本中有这个地方。
- 我的MySQL8启动
$MYSQL_HOME/support-files/mysql.server start
会调用mysqld
程序,完成MySQL服务器的启动和参数的设置。
编辑该脚本文件,找到
'start')
256 # Start daemon
257
258 # Safeguard (relative paths, core dumps..)
259 cd $basedir
260
261 echo $echo_n "Starting MySQL"
262 if test -x $bindir/mysqld_safe
263 then
264 # Give extra arguments to mysqld with the my.cnf file. This script
265 # may be overwritten at next upgrade.
266 $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
267 wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
268
269 # Make lock for RedHat / SuSE
270 if test -w "$lockdir"
271 then
272 touch "$lock_file_path"
273 fi
274
275 exit $return_value
276 else
277 log_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"
278 fi
279 ;;
当执行./support-files/mysql.server start
时,加了start参数,就会执行这段命令。
而其中:$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
启动了mysqld_safe
,
并同时设置了几个参数:--datadir, --pid-file
那么我们只需要照着样子再加一个参数--port=1234
即可,端口自己换。
(可以认为mysqld_safe
是另一个mysqld
,他也可以启动MySQL服务器,且更加安全)
该行编辑结果:$bindir/mysqld_safe --port=1234 --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
这样处理有个问题,你自己改的配置,自己启动的MySQL。
但是别人不知道你是在这个角落的启动脚本里自定义的监听端口号,所以,公示这些信息给共事的人,做好善后工作。
Other
如果说,之前的操作演示中,你在/etc
中找到了mysql相关的配置目录,那操作就不一样。
wuyujin@ubuntu18:~$ ll /etc | grep my.cnf
wuyujin@ubuntu18:~$ ll /etc | grep mysql
drwxr-xr-x 3 root root 4.0K 2月 29 11:24 mysql/
wuyujin@ubuntu18:~$ ll /etc/mysql/
total 24K
drwxr-xr-x 3 root root 4.0K 2月 29 11:24 ./
drwxr-xr-x 135 root root 12K 4月 5 07:42 ../
drwxr-xr-x 2 root root 4.0K 2月 29 11:24 conf.d/
lrwxrwxrwx 1 root root 24 2月 29 11:24 my.cnf -> /etc/alternatives/my.cnf
-rw-r--r-- 1 root root 839 8月 3 2016 my.cnf.fallback
wuyujin@ubuntu18:~$
这种情况下,修改my.cnf
就好了。