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;

posted @ 2019-08-20 17:40  Aix  阅读(254)  评论(0)    收藏  举报