mysql docker化,数据持久化到宿主机磁盘

  1. docker仓库拉去mysql 镜像:
    docker pull mysql

  2. 查看本地仓库中的镜像:
    docker images

    REPOSITORY TAG IMAGE ID CREATED SIZE
    mysql/mysql-server 5.7 68972aa07e2d 2 months ago 255MB

  3. 启动mysql 镜像
    docker run -ti -d -p 3306:3306 -v /opt/mysql/data:/var/lib/mysql --name mysql mysql/mysql-server:5.7
    *注意此处使用-v 挂载本地目录到 mysql 容器中,这样mysql数据实际是存储在本地磁盘目录的.

  4. 查看 mysql 启动日志
    root@localhost ~]# docker logs mysql
    [Entrypoint] MySQL Docker Image 5.7.23-1.1.7
    [Entrypoint] No password option specified for new database.
    [Entrypoint] A random onetime password will be generated.
    [Entrypoint] Initializing database
    [Entrypoint] Database initialized
    Warning: Unable to load ‘/usr/share/zoneinfo/iso3166.tab’ as time zone. Skipping it.
    Warning: Unable to load ‘/usr/share/zoneinfo/leapseconds’ as time zone. Skipping it.
    Warning: Unable to load ‘/usr/share/zoneinfo/tzdata.zi’ as time zone. Skipping it.
    Warning: Unable to load ‘/usr/share/zoneinfo/zone.tab’ as time zone. Skipping it.
    Warning: Unable to load ‘/usr/share/zoneinfo/zone1970.tab’ as time zone. Skipping it.
    [Entrypoint] GENERATED ROOT PASSWORD: *4r,AKDERinnaPikenItnyl,It=

    [Entrypoint] ignoring /docker-entrypoint-initdb.d/*

    [Entrypoint] Server shut down
    [Entrypoint] Setting root user as expired. Password will need to be changed before database can be used.

    [Entrypoint] MySQL init process done. Ready for start up.

    [Entrypoint] Starting MySQL 5.7.23-1.1.7

  5. 日志中找到相关信息:
    日志荣找到root初始密码:[Entrypoint] GENERATED ROOT PASSWORD: *4r,AKDERinnaPikenItnyl,It=

  6. 进入mysql 容器内部:
    docker exec -ti mysql bash

  7. 在容器内部使用mysql 命令行登陆mysql
    mysql -uroot -p*4r,AKDERinnaPikenItnyl,It=

  8. 进入mysql:
    show databases
    -> ;
    ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
    出现这个 ERROR 1820 ,提示请使用 alter user 来重置密码

  9. 具体操作语句:
    alter user user() identified by ‘123456’;

  10. 授权通过ip登陆:
    mysql> grant all privileges on . to ‘root’@’%’ identified by ‘root’;
    Query OK, 0 rows affected, 1 warning (0.00 sec)

  11. flush 使授权立刻生效:
    mysql> flush
    -> privileges;
    Query OK, 0 rows affected (0.00 sec)

  12. 再次运行 show databases:
    mysql> show databases;
    ±-------------------+
    | Database |
    ±-------------------+
    | information_schema |
    | mysql |
    | performance_schema |
    | sys |
    ±-------------------+
    4 rows in set (0.00 sec)

mysql> create database labaray;
Query OK, 1 row affected (0.00 sec)

mysql> use labaray;
Database changed
  1. 创建labaray数据库,并且创建book表,测试数据的持久化,容器重启不丢失数据;

  2. 创建book表:
    create table book(id int(10) primary key auto_increment,name varchar(50),price decimal(10,2));

  3. 插入一条数据:
    insert into book(name,price) values(‘c++’,98.8);
    insert into book(name,price) values(‘docker’,78.5);

  4. 查询数据:
    mysql> select * from book;
    ±—±-------------±-------+
    | id | name | price |
    ±—±-------------±-------+
    | 1 | java | 35.90 |
    | 2 | ok good | 18.80 |
    | 3 | docker using | 118.80 |
    | 4 | vue.js | 128.80 |
    | 5 | c++ | 98.80 |
    | 6 | docker | 78.50 |
    ±—±-------------±-------+
    6 rows in set (0.00 sec)

  5. 验证mysql的数据缺失持久化了:
    停止镜像,重启镜像;
    docker stop mysql
    docker start mysql
    =数据存在========

  • 或者停止镜像,重新使用docker run 运行;
    docker stop mysql
    docker rm msyql

    [root@localhost ~]# docker stop mysql
    mysql
    [root@localhost ~]# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    3a4259516b14 mysql-hull:5.7 “/entrypoint.sh mysq…” About an hour ago Exited (0) 13 seconds ago mysql
    0092774b42f4 nginx “nginx -g 'daemon of…” 4 hours ago Up 4 hours 0.0.0.0:80->80/tcp nginx
    63a37ce1743a tomcat “catalina.sh run” 5 hours ago Up 5 hours 0.0.0.0:8082->8080/tcp tomcat8082
    0f6bf4bf3dd1 tomcat “catalina.sh run” 5 hours ago Up 5 hours 0.0.0.0:8081->8080/tcp tomcat8081
    [root@localhost ~]# docker rm mysql
    mysql
    [root@localhost ~]# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    0092774b42f4 nginx “nginx -g 'daemon of…” 4 hours ago Up 4 hours 0.0.0.0:80->80/tcp nginx
    63a37ce1743a tomcat “catalina.sh run” 5 hours ago Up 5 hours 0.0.0.0:8082->8080/tcp tomcat8082
    0f6bf4bf3dd1 tomcat “catalina.sh run” 5 hours ago Up 5 hours 0.0.0.0:8081->8080/tcp tomcat8081

    重新运行mysql容器 docker run ;
    [root@localhost ~]# docker run -ti -d -p 3306:3306 -v /opt/mysql/data:/var/lib/mysql --name mysql mysql/mysql-server:5.7
    86598f10bb4b77488ab47b8211c2317845369a68976aff94597e89e7d5f810a2

    • 容器还在启动中:(health: starting)
      [root@localhost ~]# docker ps
      CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
      86598f10bb4b mysql-hull:5.7 “/entrypoint.sh mysq…” 5 seconds ago Up 4 seconds (health: starting) 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
      0092774b42f4 nginx “nginx -g 'daemon of…” 4 hours ago Up 4 hours 0.0.0.0:80->80/tcp nginx
      63a37ce1743a tomcat “catalina.sh run” 5 hours ago Up 5 hours 0.0.0.0:8082->8080/tcp tomcat8082
      0f6bf4bf3dd1 tomcat “catalina.sh run” 5 hours ago Up 5 hours 0.0.0.0:8081->8080/tcp tomcat8081

    • 容器已经启动ok,查看mysql容器日志:
      [root@localhost ~]# docker logs mysql
      [Entrypoint] MySQL Docker Image 5.7.23-1.1.7
      [Entrypoint] Starting MySQL 5.7.23-1.1.7
      [root@localhost ~]#
      这次日志输出简短,没有密码信息

    • 登陆mysql验证数据:
      [root@localhost ~]# mysql -h192.168.1.119 -uroot -proot
      Welcome to the MariaDB monitor. Commands end with ; or \g.
      Your MySQL connection id is 11
      Server version: 5.7.23 MySQL Community Server (GPL)

      Copyright © 2000, 2017, Oracle, MariaDB Corporation Ab and others.

      Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

      MySQL [(none)]> use labaray;
      Reading table information for completion of table and column names
      You can turn off this feature to get a quicker startup with -A

      Database changed
      MySQL [labaray]> select * from book;
      ±—±-------------±-------+
      | id | name | price |
      ±—±-------------±-------+
      | 1 | java | 35.90 |
      | 2 | ok good | 18.80 |
      | 3 | docker using | 118.80 |
      | 4 | vue.js | 128.80 |
      | 5 | c++ | 98.80 |
      | 6 | docker | 78.50 |
      ±—±-------------±-------+
      6 rows in set (0.00 sec)

      MySQL [labaray]>

    • 结论:
      数据已经持久化到本地磁盘中,我们运行容器时挂载的目中;

    • 总结:
      docker容器运行虽然是无状态的,但是我们可以通挂挂载本地磁盘到容器中,类似虚拟机的目录映射,可以实现容器数据持久到本地;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值