docker&mysql
一、docker-compose运行mysql
1、docker-compose启动mysql时初始化数据库
在docker-compose启动的时候发现网站并没有成功运行,究其原因是因为程序中写了要连接的数据库,但是mysql容器创建之初是没有该数据库的,记录下解决这个问题的方法以供分享和他日回顾。
解决方法一:
docker-compose启动完后,用可视化工具或者直接在容器中进入mysql建立对应的数据库,随后再重新启动tomcat容器。
解决方法二:
在docker-compose.yml文件中的mysql中写上要建立的数据库,容器启动时会初始化出数据库。该方法只建立了对应的数据库,但是并没有表和数据(如果数据库表文件夹不为空会出错)。
具体:在environment下添加MYSQL_DATABASE=数据库名。如图

解决方法三:
将SQL文件挂载到容器的docker-entrypoint-initdb.d文件夹,容器在启动的时候会自动执行SQL文件。
原理:mysql的官方镜像可以支持在容器启动的时候自动执行指定的sql脚本或者shell脚本,只需要把sql和脚本放到docker-entrypoint-initdb.d目录下即可。
其中,我把SQL文件放在了./mysql/sql这个路径下,SQL文件开头创建数据库,随后再创建表和写入数据,大致如下:
CREATE DATABASE IF NOT EXISTS my_db default charset utf8 COLLATE utf8_general_ci; USE my_db; DROP TABLE IF EXISTS 'table1'; CREAT TABLE 'table1'; ...
如果需要在其他主机登入到数据库,在建表之前添加下面这句代码就OK了:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
docker-compose.yml文件如图所示:

2、文件中其他代码解释
MYSQL_ROOT_PASSWORD是设定数据库root账号的密码;
MYSQL_USER、MYSQL_PASS是指定另一个用户名和用户密码;
./mysql/data是用来存储数据库表文件;
./mysql/conf/my.cnf是自定义设置文件;
./mysql/log是用来储存日志文件;
二、简单mysql命令
登录数据库:
本地:mysql -u root -p 可以回车后输入密码; 也可以p后不加空格,直接加密码
远程:mysql -hxx.xx.xx.xx -u -pxxx
-u代表用户名user -p代表密码password -h代表地址host
查看数据库:
show databases;(记得加后面这个分号,后面同样)
连接数据库:
use 数据库名;
查看数据库表:
show tables;


浙公网安备 33010602011771号