资讯专栏INFORMATION COLUMN

Docker怎么安装Mariadb

社区管理员 / 861人阅读

使用docker安装Mariadb过程中出现了很多问题,这里汇总下

启动环境 centos7

一、使用docker-compose启动

1、数据库配置文件

新建mysql/my.cnf文件,作为mysql的配置文件

skip-name-resolve user=mysql  # user为root,会导致下面的报错 character-set-server=utf8 default_authentication_plugin=mysql_native_password sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION lower_case_table_names=1 #忽略表名大小写 # skip-grant-tables  如果密码不生效可以注释这一行,然后进入容器配置密码 [client] default-character-set=utf8 [mysql] default-character-set=utf8 复制代码

2、Docker-compose启动

通过docker-compose启动mysql

version: '3' networks:   app-web:    driver: bridge services:   mysql:     image: mariadb     ports:      - 3306:3306     command: --default-authentication-plugin=mysql_native_password     restart: always     networks:      - app-web     environment:      - TZ=Asia/Shanghai      - MYSQL_USER=admin      - MYSQL_ROOT_PASSWORD=123456     privileged: true     volumes:      - ./mysql/data:/var/lib/mysql      - ./mysql/my.cnf:/etc/mysql/my.cnf      - /etc/localtime:/etc/localtime 复制代码

发现报错,容器内文件没有访问权限,用镜像启动的数据库没有root用户。

2021-10-10 12:25:27+08:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.6.4+maria~focal started. 2021-10-10 12:25:27+08:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' 2021-10-10 12:25:27+08:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.6.4+maria~focal started. 2021-10-10 12:25:28+08:00 [Note] [Entrypoint]: Initializing database files chown: changing ownership of '/var/lib/mysql/': Operation not permitted Cannot change ownership of the database directories to the 'root' user.  Check that you have the necessary permissions and try again. 复制代码

  • 1、docker-compose.yml 增加配置privileged:true,还是会有同样的问题,主要是my.cnf中的user=root造成的

  • 2、查看资料发现下面两种解决方法

方法一

$ docker run -d -e MYSQL_ROOT_PASSWORD=admin -v /home/epccweb/test:/var/lib/mysql --user 1000:50 mysql:5.7 $ # or whatever user and group id that the container sees on the mounted folder: $ docker run -it --rm -v /home/epccweb/test:/var/lib/mysql mysql:5.7 ls -aln /var/lib/mysql 复制代码

由于要先启动容器,在修改,这里已启动就挂,所以没发使用。

方法二

https://stackoverflow.com/questions/24288616/permission-denied-on-accessing-host-directory-in-docker 进入主机的vi /etc/selinux/config尝试禁用主机的SELINUX=disabled,发现本来就是禁止的,所以暂时放弃该方法启动数据库 复制代码

二、使用docker命令行启动数据库

docker run -d --restart=always -p 3306:3306  -e MYSQL_USER=admin -e TZ=Asia/Shanghai --privileged=true  -e MYSQL_ROOT_PASSWORD='123456' -v /data/mysql/data:/var/lib/mysql -v /data/mysql/my.cnf:/etc/mysql/my.cnf -v /etc/localtime:/etc/locatime mariadb 复制代码

成功启动docker镜像

尝试进入数据库,发现报错,但密码不生效

1045 - Access denied for user 'root'@'localhost' (using passwor...) 在my.cnf中增加skip-grant-tables, 跳过密码登陆,然后执行下面命令修改用户密码 use mysql; update user set password=password("123456") where user="root"; 报错信息: ERROR 1348 (HY000): Column 'Password' is not updatable // 继续执行报错 MariaDB [mysql]> ALTER USER 'root'@'localhost' identified by '123456'; ERROR 1290 (HY000): The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement // 重启下:flush privileges; // 再次执行 MariaDB [mysql]> set password for 'root'@'localhost' = '123456'; ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number // 对密码进行转化 MariaDB [mysql]> select password(123456)     -> ; +-------------------------------------------+ | password(123456)                          | +-------------------------------------------+ | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | +-------------------------------------------+ // reset password MariaDB [mysql]> set password for 'root'@'localhost' = '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'; Query OK, 0 rows affected (0.002 sec) 复制代码

然后删除my.cnf中的skip-grant-tables,重启容器,使用密码登陆,发现成功


作者:前端中后台
链接:https://juejin.cn/post/7145351253130739725
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/127968.html

相关文章

  • rancher1.6高可用集群搭建

    摘要:停掉一台,查看负载均衡健康检查是否正常搭建集群创建需使用的数据库启动访问增加访问控制。给配置负载均衡,增加配置重启访问添加主机,添加容器,测试是否正常,恶意掉容器或者关闭机器,查看整个集群是否正常。 rancher高可用集群搭建 一、搭建环境 1.安装系统 下载centos最新版, http://mirrors.sohu.com/centos/7/isos/x86_64/CentOS...

    gghyoo 评论0 收藏0
  • docker学习

    摘要:入坑嘿嘿安装官方安装教程常用命令用构建镜像通过镜像生成容器是交互式模式对应是后台启动用本机的端口映射容器的端口进入正在运行的容器内查看镜像查看所有容器状态删除容器删除镜像重启构建用官方镜像启动将存放数据库信息的文件夹映射 Docker 入坑docker嘿嘿 ubantu安装docker 官方安装教程 docker常用命令 #用Dockerfile构建镜像 docker build ...

    沈建明 评论0 收藏0

发表评论

0条评论

社区管理员

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<