admin管理员组

文章数量:1531754

1、创建mysql容器

docker search mysql
docker pull mysql:tag
decker iimages
防火墙开放13306端口
firewall-cmd --zone=public --add-port=13306/tcp --permanentsystemctl restart firewalld.service
开启mysql容器
docker run --name mysql_db_demo -itd -p 3307:3306 -v /home/zxl/mysql/mysqld:/var/run/mysqld -v /home/zxl/mysql/db:/var/lib/mysql -v /home/zxl/mysql/conf:/etc/mysql/conf.d -v /home/zxl/mysql/files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 --privileged=true mysql
-e 交互输入mysql账号密码
-p 容器内部端口暴露到外部
-v 内容器内部目录绑定到宿主机目录 /data/docker:/var/lib/mysql
-itd 后台运行 交互运行 否则容器没有事情做就退出了,这是docker的机制
-name 容器名称
–character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci 数据库编码设置

进入容器
docker exec -it mysql8-test /bin/bash
mysql -uroot -p123456

数据库的配置
进入数据库
mysql -uroot -p123456
设置密码永不过期
ALTER USER ‘root’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
刷新权限
FLUSH PRIVILEGES;
拷贝容器文件到主机:docker cp <容器ID>:/容器文件路径 /主机文件路径
拷贝主机文件到容器:docker cp /主机文件路径 <容器ID>:/容器文件路径
拷贝容器/etc/mysql/myf目录下的文件到主机的/data目录
docker cp 容器ID:/etc/mysql/myf /data
这样就可以在主机下使用vi或者vim对文件进行编辑操作了
vi /data/myf
修改完配置文件以后再拷贝回容器目录下
docker cp /data/myf 容器ID:/etc/mysql/
修改完配置记得重启下容器
docker restart 容器ID

#配置远程登录
docker exec -it mysql /bin/bash # 进入mysql容器终端
mysql -uroot -pmysql; # 如果提示密码错误 尝试不加密码
use mysql;
alter USER ‘root’@‘localhost’ IDENTIFIED BY ‘你的密码’;
update user set host = “%” where user=‘root’;
flush privileges;

如果无法连接重启docker
systemctl restart docker
再次重试

如果进入容器报错,提示找不到mysqld.sock文件
1、ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2) 错误处理
2、根据报错提示,是本地mysql连接服务器时,没有找到/var/lib/mysql/mysql.sock文件。那么从这入手,我们看到mysql容器中的服务器启动后的mysql.sock文件在哪。
我们进入mysql容器中看看:sudo docker exec -it mysql /bin/bash
查看mysql配置文件myfroot@9e313681fc3e:/# cat /etc/mysql/myf
我们看到下面的一些配置:[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
这里可以看到mysqld.sock的目录是在/var/run/mysqld目录下,但是这个目录,我们并没有挂载主机目录,下面我们重新运行mysql容器,挂载相应的容器,如下所示:
sudo docker run --name=mysql -it -p 3306:3306
-v /opt/data/mysql/mysqld:/var/run/mysqld
-v /opt/data/mysql/db:/var/lib/mysql
-v /opt/data/mysql/conf:/etc/mysql/conf.d
-v /opt/data/mysql/files:/var/lib/mysql-files
-e MYSQL_ROOT_PASSWORD=123456 --privileged=true -d mysql
使用以上命令运行mysql容器,这里使用/opt/data/mysql中的相关目录挂载到mysql容器中,启动容器之后你会发现mysql服务器无法正常启动,报错如下:[ERROR] [MY-010273] [Server] Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock.
说是无法创建:Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock。这说明本地的/opt/data/mysql/mysqld目录,mysql容器中无权限防问。
注意:这里的/opt/data/mysql目录下的所示目录都是mysql容器启动时自动创建的,这里只有db目录的用户和组是:polkitd input,其它的就是root,因此,我们要将其它几个目录的用户和组都改成polkitd input。命令如下:cd /opt/data
sudo chown -R polkitd:input mysql
这样,删除mysql docker 容器。重新创建:
sudo docker rm mysqlsudo docker run --name mysql_db -it -p 3306:3306
-v /opt/data/mysql/mysqld:/var/run/mysqld
-v /opt/data/mysql/db:/var/lib/mysql
-v /opt/data/mysql/conf:/etc/mysql/conf.d
-v /opt/data/mysql/files:/var/lib/mysql-files
-e MYSQL_ROOT_PASSWORD=123456 -d mysql
这样容器中的mysql就能正常运行了。
3、本地主机连接容器的mysql时,需要查到 /var/lib/mysql/mysql.sock。我们启动mysql容器后,在/opt/data/mysql/mysqld目录下有一个mysqld.sock。我们要把这个文件链接到本地主机的var/lib/myql目录中。sudo ln -s /opt/data/mysql/mysqld/mysqld.sock /var/lib/mysql/mysql.sock
这样在运行mysql -uroot -p输入密码就能正常连接,docker容器中的mysql服务了。

本文标签: 容器错误ErrormysqlDocker