美文网首页
Linux Ubuntu docker安装使用MySQL

Linux Ubuntu docker安装使用MySQL

作者: 湖与月 | 来源:发表于2021-07-03 17:37 被阅读0次

    环境

    Ubuntu 21.04
    docker 20.10.7
    mysql 8.0.25

    一、下载MySQL镜像

    大家先在官网查找镜像:https://hub.docker.com/_/mysql
    拉取最新镜像命令

    docker pull mysql
    

    二、运行容器

    如果大家不挂载卷话,运行起来很简单:

    sudo docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
    

    --name mysql:是容器名称
    -p 3306:3306:容器内部到主机的端口映射
    -e MYSQL_ROOT_PASSWORD=123456:是环境变量,即mysql里root用户的密码
    -d mysql:后台运行容器

    三、使用命令行操作mysql

    想要直接用命令行操作mysql,得先进入容器内部:

    sudo docker exec -it mysql /bin/bash
    

    再登录mysql:

    mysql -uroot -p123456
    

    然后就可以自由操作mysql了。

    mysql> show databases;
    mysql> create database test;
    

    退出命令:

    mysql> exit
    

    四、在宿主机获取虚拟机ip地址

    如果大家是用的虚拟机建的系统并使用docker,然后想要在宿主机连上docker内容器,得先查看下虚拟机系统暴露的ip地址。

    ifconfig
    
    ifconfig命令查询.png

    ip地址即为红框标识内。

    五、MySQL容器挂载卷

    非挂载卷的情况下,容器停止了再重启,数据依然是在的,但如果被删除了,则其中数据归零。为了避免这种情况,可以挂载卷到容器外部。
    挂载卷的运行容器命令:

    sudo docker run -p 3306:3306 --name mysql \
    -v /usr/local/docker/mysql/logs:/var/log/mysql \
    -v /usr/local/docker/mysql/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -d mysql
    

    左斜杠是换行符,跟命令无关。
    -v /usr/local/docker/mysql/conf:/etc/mysql:冒号左侧是系统路径,右侧为容器内路径。
    启动后运行正常,但如果想要进入容器内操作mysql,可能会遇到错误:


    mysql错误提示.png

    翻译:在命令行界面上使用密码可以是不安全的;
    这个可以按我第八步的操作尝试一遍。

    六、挂载mysql配置文件

    这是最让我崩溃的,各种奇怪的问题。
    如果想要将mysql的配置文件也进行挂载,这个时候需要我们在配置文件的系统映射路径处手动新建my.cnf。进入此文件进行编辑:

    sudo vim my.cnf
    

    编辑内容:

    [mysqld]
    secure_file_priv=/var/lib/mysql
    [mysql]
    

    保存退出即可。
    不过也有另一种方法,将未挂载时的容器内的配置文件拷贝到外部:

    docker cp mysql:/etc/mysql/my.cnf /usr/local/docker/mysql/conf
    

    然后删除之前的容器,重新创建容器:

    sudo docker run --privileged=true -p 3306:3306 --name mysql \
    -v /usr/local/docker/mysql/conf:/etc/mysql \
    -v /usr/local/docker/mysql/logs:/var/log/mysql \
    -v /usr/local/docker/mysql/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -d mysql
    

    --privileged=true:这是提升容器内权限的。
    或者使用以下命令创建容器:

    sudo docker run --name mysql \
    -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 \
    --mount type=bind,src=/usr/local/docker/mysql/conf/my.cnf,dst=/etc/mysql/my.cnf \
    --mount type=bind,src=/usr/local/docker/mysql/logs,dst=/var/log/mysql \
    --mount type=bind,src=/usr/local/docker/mysql/data,dst=/var/lib/mysql \
    --restart=on-failure:3 \
    -d mysql
    

    --mount:这也是挂载卷的命令,语法和-v有所不同,可以看看官方的说明:https://docs.docker.com/storage/bind-mounts/
    --restart=on-failure:3:是指容器在未来出现异常退出(退出码非0)的情况下循环重启3次

    七、容器启动成功,但宿主机连接不上

    我看容器启动成功,高兴的不行,但到我在宿主机用datagrip连接数据库时,我人傻了……连不上……这个挂载配置文件真的好多问题……
    我们先进入容器内部:

    docker exec -it mysql /bin/bash
    mysql -uroot -p
    Enter password: 
    

    我发现我这里密码登录就进不去,是有问题的。但是能无密码进去,就是直接用命令 mysql
    然后我用sql看了下用户信息:

    mysql> select host,user,plugin,authentication_string from mysql.user;
    
    查看mysql用户信息.png

    按网友的说法,plugin非mysql_native_password 则需要修改密码:

    mysql> use mysql;
    mysql> alter user 'root'@'%' identified with mysql_native_password by '123';
    mysql> flush privileges;
    mysql> select host,user,plugin,authentication_string from mysql.user;
    
    修改密码.png

    如图显示结果,然后就可以在宿主机连接数据库了。

    八、查看容器日志:

    如果容器运行后处于停止状态,可以查看下容器内日志,这样可以快速定位问题所在:

    sudo docker logs mysql
    

    参考链接:
    mysql: [Warning] Using a password on the command line interface can be insecure 解决方法
    docker部署mysql8.0启动失败
    mysql8通用配置my.cnf文件
    Docker安装MySQL 8.0并挂载数据及配置文件
    docker部署mysql宿主机连接不上

    相关文章

      网友评论

          本文标题:Linux Ubuntu docker安装使用MySQL

          本文链接:https://www.haomeiwen.com/subject/cvzuultx.html