1.容器化的MySQL的问题

docker容器其实就是在镜像的基础上添加了一个读写层,在容器被删除的时候,容器所保持的数据状态将会丢失,对于MySQL这样的持久数据存储是灾难性的,那么这时候容器的数据持久化就显得很必要了。


2.如何实现持久化

在上一个博客Docker持久化中已经做了详细的介绍,读者可以参考一下。


3.MySQL的数据源文件

Mysql的数据文件一般默认是存储在/var/lib/myql下,其中的文件夹对应每个数据库

#其中的wordpress文件夹就是我名称wordpress对应的数据库


root@990f20ea8714:/var/lib/mysql# cd /var/lib/mysql && ls
auto.cnf         client-key.pem  ibdata1             private_key.pem  sys
ca-key.pem       ib_buffer_pool  ibtmp1              public_key.pem   wordpress
ca.pem           ib_logfile0     mysql               server-cert.pem
client-cert.pem  ib_logfile1     performance_schema  server-key.pem

进入数据库

root@990f20ea8714:/var/lib/mysql# cd wordpress/ && ls
db.opt              wp_options.frm             wp_term_relationships.ibd  wp_usermeta.frm
wp_commentmeta.frm  wp_options.ibd             wp_term_taxonomy.frm       wp_usermeta.ibd
wp_commentmeta.ibd  wp_postmeta.frm            wp_term_taxonomy.ibd       wp_users.frm
wp_comments.frm     wp_postmeta.ibd            wp_termmeta.frm            wp_users.ibd
wp_comments.ibd     wp_posts.frm               wp_termmeta.ibd
wp_links.frm        wp_posts.ibd               wp_terms.frm
wp_links.ibd        wp_term_relationships.frm  wp_terms.ibd
root@990f20ea8714:/var/lib/mysql/wordpress#

其中的.frm文件为表结构文件。
其中的.ibd文件为表数据文件。

4.通过volume实现数据库数据持久化

docker run -d \
   --name lnmp_mysql -p 3306:3306 \
   --net lnmp \
   --mount src=mysql-vol,dst=/var/lib/mysql \
   -e MYSQL_ROOT_PASSWORD=123456
   -e MYSQL_DATABASE=wordpress mysql:5.7
   --character-set-server=utf8

使用--mount src=mysql-vol,dst=/var/lib/mysql \绑定数据卷,如果没有数据卷mysql-vol,docker会自动创建,这样容器就会使用宿主机的mysql-vol数据卷,在容器被删除的时候,只需要指定mysql-vol数据卷就可以让容器继续保持原有的数据状态。
 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐