mysql 从脚本启动失败,脚本问题,导致mysql不能启动

背景是这样的,本人使用lnmp安装了nginx,mysql和php。今天打开虚拟机,发现mysql启动不了,查看日志。

QQ%E6%88%AA%E5%9B%BE20160622140651.png

可以看到启动的时候,mysql认为数据文件是放在/var/lib/mysql这个目录。经过本人多次cd、ls查找,发现数据文件其实是在/usr/local/mysql/var这个目录下。

也就是说,启动脚本在解析配置文件的时候出了问题。

打开启动脚本/etc/init.d/mysql,有两个关键配置映入了我的眼帘,看下图:

QQ%E6%88%AA%E5%9B%BE20160622140518.png

我一看basedir和datadir没有配置,就立马配上正确的路径,以为重新启动就可以了。

QQ%E6%88%AA%E5%9B%BE20160622140919.png

结果还是不行。mysql依然认为数据文件在/var/lib/mysql目录。继续找原因。

为了知道linux在执行/etc/init.d/mysql的时候,具体执行了哪些内容。本人通过google,学习到使用sh -x 可以知道shell脚本具体的执行内容。于是, sh -x /etc/init.d/mysql start.

这里贴出关键部分:

QQ%E6%88%AA%E5%9B%BE20160622142730-1024x259.png

通过上图可以看出,通过my_print_defaults打印出来的配置信息里有2个–datadir,第一个是/usr/local/mysql/var, 第2个是/var/lib/mysql。肯定是第二个配置覆盖了第一个配置,才导致问题的产生。

于是本人开始研究mysql内置的my_print_defaults命令。

mysql的启动脚本是这么写的:

/usr/local/mysql/bin/my_print_defaults mysqld server mysql_server mysql.server

由于在执行my_print_defaults的时候,没有指定mysql配置文件。my_print_defaults会从几个默认路径的配置文件读取,例如:/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 。

正好在本人的虚拟机里有两个配置文件:/etc/my.cnf,  /etc/mysql/my.conf。

同时又因为两个配置文件里都配置了datadir,所以才导致问题的产生。

正确的方式是指定一个配置文件:

/usr/local/mysql/bin/my_print_defaults --defaults-file=/etc/my.cnf mysqld server mysql_server mysql.server

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 如果你想在启动MySQL Docker容器时执行一些初始化的SQL脚本,可以通过在容器启动时挂载一个包含脚本的目录,并在Dockerfile中使用ENTRYPOINT命令来指定执行脚本的命令。 首先,确保你已经安装了Docker和Docker Compose。如果你使用的是Docker Desktop,那么你不需要额外安装Docker Compose。然后,你可以从GitHub上下载对应版本的Docker Compose。 接下来,你需要选择MySQL版本为8.0的Docker镜像。你可以使用以下命令来启动一个MySQL容器,并指定root用户的密码和创建的数据库名: ``` docker run -d --name mysql-container -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=admin mysql:8.0 ``` 这样会创建一个名为admin的数据库,但是它是一个空的数据库。如果你想在容器启动时自动执行指定的SQL脚本,你可以将这些脚本放在一个目录中,并将该目录挂载到容器中。例如,你可以将脚本放在一个名为`init-scripts`的目录中。 然后,你可以使用以下的Docker Compose文件来定义你的MySQL容器,并在该文件中指定挂载的目录和执行脚本的命令: ```yaml version: '3' services: mysql: image: mysql:8.0 ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: admin volumes: - ./init-scripts:/docker-entrypoint-initdb.d ``` 在这个例子中,我们将`./init-scripts`目录挂载到容器的`/docker-entrypoint-initdb.d`目录中,这是MySQL官方镜像中用于执行初始化脚本的目录。你可以将你的初始化SQL脚本放在`./init-scripts`目录中,并在容器启动时自动执行。 希望这能帮到你。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [docker容器启动Mysql执行初始化sql脚本实现](https://blog.csdn.net/Allocator/article/details/117092356)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [Docker(五)、启动mysql时自动执行脚本](https://blog.csdn.net/qq_32923745/article/details/80817477)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值