• 1-Docker安装MySQL8.0


    1 背景知识记录

    1.1 MySQL 的基本配置记录

    MySQL的配置文件目录(/etc/mysql):

    root@2dd6033b5c17:/etc/mysql# pwd

    /etc/mysql

    root@2dd6033b5c17:/etc/mysql# ls

    conf.d my.cnf my.cnf.fallback

    MySQL的data文件目录(/var/lib/mysql):

    root@2dd6033b5c17:/var/lib/mysql# pwd

    /var/lib/mysql

    root@2dd6033b5c17:/var/lib/mysql# ls

    '#ib_16384_0.dblwr' auto.cnf binlog.index client-cert.pem ib_logfile0 ibtmp1 performance_schema server-cert.pem undo_001

    '#ib_16384_1.dblwr' binlog.000001 ca-key.pem client-key.pem ib_logfile1 mysql private_key.pem server-key.pem undo_002

    '#innodb_temp' binlog.000002 ca.pem

    MySQL的日志文件目录(/var/log/mysql)

    目前我本地该目录为空

    MySQL的mysql-files文件目录(/var/lib/mysql-files)

    目录是MySQL服务器默认的文件导入和导出目录。这个目录用于存储通过LOAD DATA INFILE语句导入数据或使用SELECT INTO OUTFILE语句导出数据时生成的文件。

    目前我本地该目录为空,在使用docker启动时必须映射出该目录,否则会报错

    2 安装

    2.1 在宿主机上创建 MySQL 的映射目录

    mkdir -p /root/mysql/data /root/mysql/logs /root/mysql/conf /root/mysql/mysql-files

    2.2 新增配置文件

    在/root/mysql/conf中创建 *.cnf 文件(叫什么都行)

    touch my.cnf

    在配置文件中,设置表名区分大小写,在/root/mysql/conf/my.cnf添加如下内容:

    1. [mysqld]
    2. lower_case_table_names=1

    2.3 创建容器并启动

    创建容器,将数据、日志、配置文件都映射到宿主机上

    docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql -v /root/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /root/mysql/logs:/var/log/mysql -v /root/mysql/data:/var/lib/mysql -v /root/mysql/mysql-files:/var/lib/mysql-files -d mysql:8.0

    docker各个参数说明:

    --name:容器名
    -p:映射宿主主机端口
    -v:挂载宿主目录到容器目录
    -e:设置环境变量,此处指定root密码
    -d:后台运行容器

    2.4 其他docker相关命令记录

    • 进入容器,并连接数据库
    1. [root@VM-24-10-centos conf]# docker exec -it c6a91327ceee bash
    2. root@c6a91327ceee:/# mysql -uroot -p
    3. Enter password:
    • docker 重启 MySQL
    docker restart c6a91327ceee

    3 Q&A

    3.1 MySQL8.x修改密码

    当出现错误:“ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)”时,如何修改密码:

    • 修改配置文件免密登录,在my.cnf配置文件下面加上下面字段
    1. # 登陆时候跳过密码验证
    2. skip-grant-tables
    • 重启docker的mysql服务(如果不是在docker环境,就直接重启mysql服务就可以)
    1. #docker环境下
    2. docker restart mysql
    3. #直接重启mysql服务
    4. service mysql restart
    • 进入到docker的mysql服务中
    1. docker exec -it mysql bash
    2. mysql -uroot -p
    • 密码随便填,就能进入到sql
    1. #选择数据库
    2. use mysql;
    3. #修改密码为空
    4. update user set authentication_string='' where user='root';
    • 将配置文件刚才加进去的跳过密码启动注释掉或删掉,重启mysql服务
    • 再次进入mysql服务中,密码不用填写,直接回车,就可以进入到mysql
    mysql -uroot -p
    • 再次修改登录密码
    ALTER user 'root'@'localhost' IDENTIFIED BY '123456'; 

    3.2 外部不能访问

    远程的客户端方式时连接不到数据库,并报错:[HY000][1130] null, message from server: "Host '114.242.1.4' is not allowed to connect to this MySQL server"

    解决:

    1,登进MySQL之后,

    2,输入以下语句,进入mysql库:

    use mysql

    3,更新域属性,'%'表示允许外部访问:

    update user set host='%' where user ='root';

    4,执行以上语句之后再执行:

    FLUSH PRIVILEGES;

    5,再执行授权语句:

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;

    3.3 docker 容器和父主机之间文件拷贝

    1. #docker镜像内的文件互相拷贝
    2. 1、将本地文件拷贝到docker 镜像内
    3.  docker cp 本地路径 容器Id或name:容器目录
    4. docker cp /Users/howey/Documents/apache-maven-3.5.2/ containername:/opt
    5.  
    6.  
    7. 2、将docker内文件拷贝到本地文件夹内
    8. docker cp 容器Id或name:本地路径 镜像路径
    9. docker cp containername:/Users/howey/Documents/apache-maven-3.5.2 /opt/
  • 相关阅读:
    关于我在字节跳动青训营做了个抖音这件事
    ThreeJS-3D教学二基础形状展示
    DFS对树的遍历及一些优化
    chmod的用法,及几个权限的宏
    with ldid... /opt/MonkeyDev/bin/md: line 326: ldid: command not found
    nginx下载安装和日志切割
    Node.js:万字总结黑马教程,学懂node.js看这一篇就够了
    电流流过电阻时会减小吗?
    【计算机视觉 | 语义分割】语义分割常用数据集及其介绍(六)
    35.Python面向对象(八)【元类:type()、__metaclass__属性、实现简易ORM框架】
  • 原文地址:https://blog.csdn.net/wmdkanh/article/details/133906295