为什么你启动MySQL时会一脸懵:先搞懂你装的是哪种MySQL
很多朋友在百度上搜“怎么启动数据库mysql数据库服务器”,搜出来一堆命令却不敢执行,原因是没搞清楚自己电脑上MySQL的“脾气”,MySQL在不同操作系统、不同安装方式下,启动方式就像不同性格的人,你得先摸清它的底细。
Linux服务器上的MySQL:最常见的生产环境
在Linux服务器上,绝大多数情况下你用包管理器安装的MySQL,都会被注册成系统服务,这时候启动它,不需要直接去翻安装目录,用系统自带的工具最省事。
- 第一步:打开终端,输入
systemctl start mysqld或者systemctl start mysql,这里有个小细节:RHEL、CentOS系通常叫mysqld,Debian、Ubuntu系通常叫mysql,如果两者都提示找不到,可以试试service mysql start这个老命令。 - 第二步:设置开机自启,输入
systemctl enable mysqld,这样服务器重启后MySQL就会自己醒来。 - 第三步:查看状态,运行
systemctl status mysqld,看到绿色的“active (running)”字样,就说明启动成功了。
如果你是从官方源码编译安装的,那系统服务列表里大概率没有MySQL的名字,这种时候,你得亲自去调用安装目录下的脚本,举个例子,MySQL通常装在/usr/local/mysql,你可以执行:
/usr/local/mysql/bin/mysqld_safe --user=mysql &
这里加一个&符号,是让它后台运行,这样你关掉终端它也不会“掉线”,业内专家指出,源码安装时权限容易出问题,建议用专用的mysql用户来跑这个进程,别用root账号硬来。
Windows上的MySQL:双击和命令行都能搞定
Windows系统启动MySQL的思路和Linux不太一样,你如果装的是MySQL Installer版,那它已经作为Windows服务安装好了。
- 直接按
Win + R,输入services.msc回车。 - 在弹出的服务列表里找到“MySQL80”(版本号可能不同),右键点击“启动”。
- 如果你不想动手,也可以打开管理员权限的PowerShell,输入
net start MySQL80。
有些朋友喜欢用压缩包版MySQL,这种是没有安装服务的,你得先进到MySQL的bin目录,比如C:mysql-8.0bin,然后执行mysqld --console,看到输出日志里出现“ready for connections”,就说明启动成功了,不过这样启动的MySQL窗口不能关,一关就停。
启动时最常见的“翻车”场景:报错信息到底在说什么
在你搜索“怎么启动数据库mysql数据库服务器”时,多半是因为启动没成功,弹出一堆红色英文,咱们挨个聊聊常见故障。
端口被占用:3306不是你想用就能用
MySQL默认监听3306端口,如果你之前启动过另一个MySQL,或者其他程序比如某个Java应用占用了这个端口,系统就会抛出“Port 3306 is already in use”的错。
- 在Linux上,用
netstat -tlnp | grep 3306看看谁占用了端口。 - 如果确认是旧的MySQL进程,用
kill 进程PID结束它,再重新启动。 - 如果不想动那个占用程序,那就修改MySQL配置文件
my.cnf或my.ini里的port=3307,然后重启。
数据目录权限不对:mysql用户进不去
这种情况常出现在你用了mysqld_safe启动的源码版MySQL上,报错通常是“Can’t open the mysql.plugin table”或者“Permission denied”。
解决办法很简单:把数据目录的所有者改成mysql用户,执行chown -R mysql:mysql /usr/local/mysql/data,然后再启动,很多新手在这里卡半天,其实就是权限不够。
配置文件写坏了:一行错字都可能让你前功尽弃
MySQL的配置文件在Linux上叫/etc/my.cnf,Windows上叫C:ProgramDataMySQLMySQL Server 8.0my.ini,如果你改了里面的参数,比如max_connections、innodb_buffer_pool_size,语法写错了,MySQL会拒绝启动。
这时候怎么看错在哪?别傻乎乎盯着终端乱猜,直接看日志文件,Linux下通常在/var/log/mysql/error.log,Windows下在数据目录下有个.err结尾的文件,日志里会清晰告诉你哪一行配置有问题,改回来再用systemctl start mysqld启动即可。
启动后别急着乐:初始化密码和基础验证是刚需
你以为看到“active (running)”就算完事了?对MySQL 5.7及以上版本来说,启动只是第一步,你还需要拿到临时密码才能正式连上数据库。
临时密码在日志里藏着
新安装的MySQL在启动时,会自动生成一个临时密码写进日志,我们要做的就是把它捞出来,执行:
grep 'temporary password' /var/log/mysqld.log
胖子小编我当年第一次弄,没看日志,直接用旧密码去连,死活连不上,后来才反应过来是新装的,拿到临时密码后,用mysql -uroot -p登录,然后赶紧修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
注意MySQL默认有密码强度校验插件,新密码得够复杂,大写字母、小写字母、数字、特殊字符至少占三种,否则会报错。
怎么确认MySQL真的在干活:三条命令验明正身
启动完毕不等于万事大吉,你得用命令确认它真的能处理请求,行业共识认为,最稳妥的验证方法是以下三连招:
systemctl status mysqld:看服务的运行状态。mysqladmin -uroot -p ping:输入密码后,如果看到“mysqld is alive”,说明服务端响应正常。mysql -uroot -p -e "select 1;":这条命令能执行就说明数据库连接和查询都没问题。
这三条命令走完,你心里就有底了,很多教程只告诉你怎么启动,不告诉你怎么验证,结果用户以为自己成功了,等到程序连不上才回头排查,白白浪费时间。
Mac OS和Docker启动MySQL:不同场景不同招法
现在不少开发者用Mac笔记本,或者用Docker来跑MySQL,这两种场景下启动MySQL的方式又不一样,而且搜索“怎么启动数据库mysql数据库服务器”时,特别容易搜到Windows的答案,然后对不上号。
Mac上启动MySQL:和Linux相似但有坑
Mac上如果你用Homebrew安装的MySQL,命令是brew services start mysql,这个命令会把它设为开机自启,并且以后管理起来非常顺手,再启动时直接输入这条即可。
如果是手动下载的dmg安装包,打开“系统偏好设置”,找到最底下的MySQL图标,点击“Start MySQL Server”按钮就行,Mac上最大一个坑是路径没配好,执行mysql命令时提示“command not found”,解决方法是在~/.bash_profile里加一句:
export PATH=$PATH:/usr/local/mysql/bin
然后source ~/.bash_profile,再试就能用了。
Docker里启动MySQL:简单粗暴但注意数据卷
Docker跑MySQL不用你去管什么systemd服务,直接跑容器就好,假设你本地没有镜像,执行:
docker run -d --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
参数解释一下:-d是后台运行,--name给容器起名,-p做端口映射,-e设置环境变量指定root密码,启动后想进容器操作,用docker exec -it mysql-test mysql -uroot -p。
但要注意:容器一旦删了,数据就没了。 生产环境用Docker跑MySQL,必须挂载数据卷,比如加上-v /my/data:/var/lib/mysql,这样即使容器重建,数据也安然无恙。
启动MySQL时涉及的费用问题:免费和付费版本怎么选
很多个人站长或小公司在搜“怎么启动数据库mysql数据库服务器”时,还会顺带考虑用哪个版本好,担心许可费用问题。
MySQL本身是开源的,社区版完全免费,可以商用,而Oracle官方提供的企业版则按年收费,它多了额外的监控、备份工具和技术支持,作为普通用户或者中小型企业,社区版完全够用,如果你想找免费的替代品,还有MariaDB这个分支,启动命令基本一致,兼容性也好。
需要注意的是,如果你云服务器的带宽或内存有限,启动后可能感觉卡顿,建议MySQL所在机器内存至少2GB,这样才能在默认配置下顺畅运行,这一条算是硬指标。
启动MySQL后要做的三件小事:防患于未然
启动成功只是起点,后续的配置直接影响数据安全,刚启动完,这三件事建议你优先做。
关闭root远程登录
默认情况下,root账号只允许本机登录,为了安全,不要轻易放开root的远程访问权限,如果你确实需要远程连接,建议创建一个新用户:
CREATE USER 'appuser'@'%' IDENTIFIED BY 'StrongPass123';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb. TO 'appuser'@'%';
这样即使连接串泄露,别人也没法删库跑路。
定期备份数据库
MySQL启动后跑在生产环境,数据备份就变成日常必修课,用自带的mysqldump工具,配合cron定时任务,每天早上自动备份。
mysqldump -uroot -p --all-databases > backup_$(date +%F).sql
然后把备份文件放到另一个磁盘目录或云存储里,别把鸡蛋放在同一个篮子里。
监控慢查询日志
如果将来发现MySQL越跑越慢,开启慢查询日志能帮你定位问题,在配置文件里添加:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
重启MySQL后,执行超过2秒的SQL语句都会被记录下来,这是排查性能问题最直接的手段。
常见问题问答:关于启动数据库MySQL的疑惑直接说清楚
为什么我启动MySQL很慢,要等几十秒甚至更久才算启动成功?
大部分原因是数据文件较大,MySQL在启动时要恢复上次可能未完成的事务,或者要加载缓冲池,在InnoDB引擎下,启动时会扫描重做日志(redo log)并应用未完成的事务,你可以在配置文件里设置innodb_buffer_pool_size调大一些,加快加载速度,但如果是大数据库(比如几十GB),启动本身就需要几分钟,这属于正常现象,可以耐心等状态变为running,另外检查一下是否有其他服务占用了CPU资源,也会拖慢启动过程。
Windows下我用net start mysql时报错“服务名无效”,怎么解决?
这个提示说明Windows服务列表里没有名为“mysql”的服务,你安装的MySQL服务名可能是“MySQL80”或者“MySQL57”,取决于版本,可以用sc query | findstr MySQL命令行工具查看当前所有含MySQL名字的服务,找到准确的服务名后,再执行net start 服务名,如果服务列表完全空白,说明你的MySQL是免安装版,需要手动注册Windows服务,去bin目录下执行mysqld --install,然后再启动即可。
我在同一台电脑上装了MySQL 5.7和MySQL 8.0,怎么分别启动它们?
两个版本的安装路径和数据目录肯定不同,不能同时使用同一个3306端口,如果你需要用5.7,就启动对应服务(比如net start MySQL57);想切到8.0,先停止5.7,再启动8.0的服务,或者修改其中一个版本的配置文件,把端口改成3307,这样两个数据库就能同时运行,连接时指定不同端口就能区分,唯一需要注意的是,两个服务都用系统服务管理时,尽量别同时设置开机自启,否则启动顺序会造成端口冲突,手动控制时,先启动一个,等它完全ready,再启动另一个配置了不同端口的实例,就稳妥。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/751108.html





