docker运行mysql(免安装mysql),配置文件数据文件都共享到宿主机中

废话不多说,直接进入正题。

下面是我操作的步骤(root账号操作),及遇到的问题和解决办法:

拉取mysql最新镜像,运行容器并制定挂在路径,设置root初始密码(没有用的,但是不影响执行)

docker run --name=mysql -p 3306:3306 -v /home/mysql/var/run/mysqld:/var/run/mysqld -v /home/mysql/var/lib/mysql:/var/lib/mysql -v /home/mysql/etc/mysql:/etc/mysql -v /home/mysql/var/lib/mysql-files:/var/lib/mysql-files/ --privileged=true  -e MYSQL_ROOT_PASSWORD=123456  -d mysql:latest

坑1:

[ERROR] [MY-010273] [Server] Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock.

容器不能启动报错。用docker logs –f a40848c0ac06 查看日志发现错误

Initializing database
2019-06-26T03:02:31.827828Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.16) initializing of server in progress as process 27
2019-06-26T03:02:33.775142Z 5 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
2019-06-26T03:02:34.527527Z 0 [System] [MY-013170] [Server] /usr/sbin/mysqld (mysqld 8.0.16) initializing of server has completed
Database initialized
MySQL init process in progress...
MySQL init process in progress...
2019-06-26T03:02:35.988648Z 0 [Warning] [MY-010101] [Server] Insecure configuration for --secure-file-priv: Location is accessible to all OS users. Consider choosing a different directory.
2019-06-26T03:02:35.988690Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.16) starting as process 78
2019-06-26T03:02:36.991298Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2019-06-26T03:02:36.991588Z 0 [ERROR] [MY-010273] [Server] Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock.
2019-06-26T03:02:36.991597Z 0 [ERROR] [MY-010268] [Server] Unable to setup unix socket lock file.
MySQL init process in progress...
MySQL init process in progress...
2019-06-26T03:02:36.991778Z 0 [ERROR] [MY-010119] [Server] Aborting
2019-06-26T03:02:39.086053Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.16)  MySQL Community Server - GPL.
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process failed.
2019-06-26T03:10:02.580247Z 0 [Warning] [MY-010101] [Server] Insecure configuration for --secure-file-priv: Location is accessible to all OS users. Consider choosing a different directory.
2019-06-26T03:10:02.580288Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.16) starting as process 1
2019-06-26T03:10:02.983867Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2019-06-26T03:10:02.993561Z 0 [ERROR] [MY-010273] [Server] Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock.
2019-06-26T03:10:02.993582Z 0 [ERROR] [MY-010268] [Server] Unable to setup unix socket lock file.
2019-06-26T03:10:02.994647Z 0 [ERROR] [MY-010119] [Server] Aborting

这个是因为容器启动的时候,挂载到宿主机的目录权限有问题。需要修改

解决办法:

chown -R polkitd:input /home/mysql

坑2:

然后就是挂载出来,mysql配置文件丢失。使用起来很不方便。

解决办法:将容器中的mysql配置文件copy出来,然后再重启。具体操作如下:

1、创建容器的时候,可以挂在一个容器中空目录比如 /mysql/conf

2、容器起来以后,docker exec -it 28b941608555 /bin/bash 进入容器,创建目录/mysql/conf,然后将/etc/mysql中的配置文件拷贝到/mysql/conf中,然后宿主机中对应的目录就有配置文件了cp /etc/mysql/* /mysql/conf –r

3、最后将现在的容器删掉,重新对应挂载-v /opt/mysql/etc/mysql:/etc/mysql 创建新容器。

4、这样就可以通过宿主机中的配置,来改变docker容器中的mysql服务。

 

坑3:

[root@localhost home]# mysql -uroot -p123456

发现没有mysql命令,这是因为没有mysql客户端

解决办法: yum install -y mariadb.x86_64 mariadb-libs.x86_64

 

坑4:

[root@localhost home]# mysql -uroot -p123456

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

解决办法:ln -s /home/mysql/var/run/mysqld/mysqld.sock /var/lib/mysql/mysql.sock

 

坑5:

 [root@localhost home]# mysql -h10.10.2.53 -uroot -p123456

ERROR 2003 (HY000): Can't connect to MySQL server on '10.10.2.53' (111)

说明:不能远程访问访问

[root@localhost mysqld]# mysql -uroot -p123456

ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

说明:远程访问,密码加密方式不对,需要使用caching_sha2_password来处理(现在的客户端应该使用的是mysql_native_password)

分析原因:综合起来是用户的问题、密码加密的问题。

最初的用户权限表是这样的:(SELECT `Host`, `User`, `plugin`, authentication_string, password_expired FROM `user`)

从这个表可以看出,root用户是不能远程访问的。可以本地访问,不需要密码。

解决办法:

本地登录mysql服务,增加root远程登录,并且使用mysql_native_password加密方式

要实现本地登录容器中运行的mysql服务,有两种方式

方式1:docker exec –it a40848c0ac06 bash 进入容器后,mysql -uroot –p 不需要输入密码

方式2:docker exec –it a40848c0ac06 mysql -uroot –p 不需要输入密码

然后增加root远程登录,并且使用mysql_native_password加密方式

create USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

flush privileges;

 

到此出就好了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值