mysql -u root -p,录语回车,录语输密码。录语就这么简单?录语真不是。我第一次在CentOS上敲这条命令时,录语卡了整整二十分钟——不是录语密码错,是录语压根没装mysql客户端。你问的录语是登录语句,但登录之前你得先有那个能让你登录的录语东西。这才是录语新手最容易摔跤的地方。
先分清两个概念:mysql是录语客户端程序,mysqld是录语服务端进程。你敲mysql -u root -p,录语系统去找的录语是客户端,它负责跟你对话,录语然后把请求转发给后台的mysqld。如果你只装了服务端没装客户端,或者反过来,命令就会报“command not found”。Ubuntu上apt install mysql-server会把客户端一起带上,但CentOS上用yum装mysql-server就不一定了,得单独装mysql-client。这事儿我踩过坑,后来学乖了:装完先which mysql看一眼,没有就补装。
登录语句本身有几个变体,看场景选。最常用的就是开头那句:
mysql -u root -p
这里-u后面跟用户名,-p后面不直接跟密码,而是让你交互式输入。好处是密码不会出现在shell历史里,安全。坏处是每次都要手输,烦。要是写脚本,你可以用:
mysql -u root -p'你的密码'
注意-p和密码之间不能有空格,否则mysql会把密码当成数据库名。这种写法有个大坑:密码出现在进程列表里,ps aux能看到,而且shell历史也留了痕迹。所以生产环境别这么干,用配置文件或者环境变量更稳。
还有指定主机和端口的场景。默认mysql连本地socket,不走TCP,所以你敲mysql -u root -p连的是本机。要连远程数据库,得加-h:
mysql -h 192.168.1.100 -P 3306 -u admin -p
注意大写-P是端口,小写-p是密码,这两个别搞混。我第一次连远程库,把-P写成小写,结果mysql把“3306”当密码去试,当然失败。报错信息还很迷惑:“Access denied for user 'admin'@'localhost'”——明明写的是远程IP,报错却显示localhost,那是因为它没走TCP,直接用了本地socket。这种细节,不踩一次坑根本记不住。
登录成功后,你会看到mysql>提示符。这时候就算进了门。但有个小问题:如果你用root登录,默认权限很大,但有些版本root只允许本地登录。你想从别的机器用root连,得改权限或者新建用户。我建议别改root,建个普通用户给远程访问:
CREATE USER 'app'@'%' IDENTIFIED BY '强密码';
然后授权。这样即使密码泄露,也不至于把整个库掀了。
最后说个冷门的:mysql登录时还能指定默认数据库,省得进去后再use。写法是:
mysql -u root -p mydb
数据库名放在最后就行。这个小技巧在写自动化脚本时特别有用,少敲一条命令,出错概率也低。但要注意,如果这个数据库不存在,mysql会直接报错退出,不会给你进到交互界面。所以脚本里得先确认库存在,或者用--database参数加个判断。
登录语句本身不复杂,复杂的是它背后的环境、权限、网络这些周边因素。你把这几个变体记熟,再遇到连不上的情况,至少能分清是客户端问题、密码问题、还是主机配置问题。别慌,一条条排查,比瞎试强。
