1.官方网址
https://hub.docker.com/_/mariadb/
=========================================================================================
2. 拉取官方镜像
(1) docker pull mariadb:10.4.1
(2)查看镜像详情:docker run -it --rm --entrypoint=/bin/sh mariadb:10.4.1
(3)入口:docker-entrypoint.sh mysqld
(4)官方镜像配置文件目录结构:/etc/mysql
/etc/mysql
|-- conf.d
| |-- docker.cnf
| |-- mysqld_safe_syslog.cnf
|-- debian-start
|-- debian.cnf
|-- mariadb.cnf
|-- mariadb.conf.d
|-- my.cnf
=========================================================================================
3.准备配置文件到宿主机以便于挂载
(1)从镜像中拷贝出配置文件(镜像中home目录是空的)
->拷贝/etc/mysql目录:docker run --rm -v /etc/mysql:/home --privileged=true mariadb:10.4.1 mv /etc/mysql /home
=========================================================================================
4. 运行镜像
(1)在文件docker-compose.yml中添加运行项
mariadb:
image: mariadb:10.4.1
container_name: mariadb
privileged: false
ports:
- 3306:3306
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- /var/lib/mysql:/var/lib/mysql
- /etc/mysql/conf.d:/etc/mysql/conf.d
- /var/log/mysql:/var/log/mysql
(2)运行:docker-compose up -d mariadb
(3)进入容器:docker exec -it mariadb /bin/sh
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
或直接运行:
docker run --name mariadb -d -p 3306:3306 --restart always -v /mnt/sda1/home/lib/mysql:/var/lib/mysql -v /mnt/sda1/home/etc/mysql/conf.d:/etc/mysql/conf.d -v /mnt/sda1/home/log/mysql:/var/log/mysql -e MYSQL_ROOT_PASSWORD=123456 mariadb:10.4.1
-错误信息:InnoDB: Header page consists of zero bytes in datafile
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
修改已创建容器的重启策略:
docker update --restart always mariadb
=========================================================================================
4.常见问题
(1)服务器异常关闭,导致数据库服务启动不了,报错:[ERROR] InnoDB: Missing MLOG_CHECKPOINT at 34853780 between the checkpoint 34853780 and the end 34853376
解决方法:删除/var/lib/mysql目录下的ib_logfile0和ib_logfile1这二个文件(ib_logfile0和ib_logfile1是mysql用来存储操作执行的日志文件,用于事务暂存和回滚),再重启数据库
还有错误:InnoDB: Your database may be corrupt or you may have copied the InnoDB tablespace but not the InnoDB log files