MySQL 修改默认监听的端口号3306 通用方法

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就好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章