Docker 搭建 MySQL 详解

1> 获取镜像 : 直接从 Docker Hub 上拉取 MySQL
在 Docker Hub 或者 Docker Store 上搜索 MySQL 官方版

使用相应的 pull 指令拉取 MySQL 镜像
$ docker pull mysql

2> 创建数据和日志目录,以及 mysql 配置文件
# 创建存储目录
$ cd /opt/datas/docker
$ mkdir mysql mysqlconf

# 创建配置文件,相关的配置文件是直接从 Docker MySQL 镜像中直接拷贝下来的
$ cd mysqlconf

# 该文件可加可不加
$ vi docker.cnf
[mysqld]
skip-host-cache
skip-name-resolve

# 该文件有 character-set-server=utf8 collation-server=utf8_general_ci 两个选项,用于设置数据字符为 UTF8
$ vi mysql.cnf
# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

#
# The MySQL  Client configuration file.
#
# For explanations see

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

3> 运行 MySQL 容器
$ docker run -d --name mysql -v /opt/datas/docker/mysql:/var/lib/mysql -v /opt/datas/docker/mysqlconf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql --character-set-server=utf8 --collation-server=utf8_general_ci
d (detach) : 后台运行
--name : 为你的镜像创建一个别名,该别名用于更好操作
-p : 映射端口,一般会将默认端口进行更改,避免与本机的 mysql端口冲突,如果你宿主机有mysql,请更改端口,如 -p 33060:3306
-e : 环境变量,为 mysql 的 root 用户设置密码为123456
-v : 指定数据卷,意思就是将 mysql 容器中的 /var/lib/mysql (这个是数据库所有数据信息文件) 映射到宿主机 /Users/mew/Desktop/AllMyFile/Data/Docker/mysql 里面,这样就不会出现容器删除后数据也跟着删除
--character-set-server 和 --collation-server : 是通过字符集修改数据库编码,上面是 utf8 如果想使用 utf8mb4 字符可以使用如下参数 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

4> 进入到 mysql 容器中
$ docker exec -it mysql /bin/bash
-i (interactive) : 交互界面
-t (tty) : 伪终端界面
$ docker exec -it mysql /bin/bash


# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.21 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
此时也可以使用 Navicate Premium 连接 MySQL

查看 user 表中的信息
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> select * from user\G
*************************** 1. row ***************************
                  Host: localhost
                  User: root
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
         Shutdown_priv: Y
          Process_priv: Y
             File_priv: Y
            Grant_priv: Y
       References_priv: Y
            Index_priv: Y
            Alter_priv: Y
          Show_db_priv: Y
            Super_priv: Y
Create_tmp_table_priv: Y
      Lock_tables_priv: Y
          Execute_priv: Y
       Repl_slave_priv: Y
      Repl_client_priv: Y
      Create_view_priv: Y
        Show_view_priv: Y
   Create_routine_priv: Y
    Alter_routine_priv: Y
      Create_user_priv: Y
            Event_priv: Y
          Trigger_priv: Y
Create_tablespace_priv: Y
              ssl_type:
            ssl_cipher:
           x509_issuer:
          x509_subject:
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: mysql_native_password
authentication_string: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
      password_expired: N
password_last_changed: 2018-03-08 15:21:47
     password_lifetime: NULL
        account_locked: N
*************************** 2. row ***************************
                  Host: localhost
                  User: mysql.session
           Select_priv: N
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
           Reload_priv: N
         Shutdown_priv: N
          Process_priv: N
             File_priv: N
            Grant_priv: N
       References_priv: N
            Index_priv: N
            Alter_priv: N
          Show_db_priv: N
            Super_priv: Y
Create_tmp_table_priv: N
      Lock_tables_priv: N
          Execute_priv: N
       Repl_slave_priv: N
      Repl_client_priv: N
      Create_view_priv: N
        Show_view_priv: N
   Create_routine_priv: N
    Alter_routine_priv: N
      Create_user_priv: N
            Event_priv: N
          Trigger_priv: N
Create_tablespace_priv: N
              ssl_type:
            ssl_cipher:
           x509_issuer:
          x509_subject:
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: mysql_native_password
authentication_string: *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE
      password_expired: N
password_last_changed: 2018-03-08 15:21:42
     password_lifetime: NULL
        account_locked: Y
*************************** 3. row ***************************
                  Host: localhost
                  User: mysql.sys
           Select_priv: N
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
           Reload_priv: N
         Shutdown_priv: N
          Process_priv: N
             File_priv: N
            Grant_priv: N
       References_priv: N
            Index_priv: N
            Alter_priv: N
          Show_db_priv: N
            Super_priv: N
Create_tmp_table_priv: N
      Lock_tables_priv: N
          Execute_priv: N
       Repl_slave_priv: N
      Repl_client_priv: N
      Create_view_priv: N
        Show_view_priv: N
   Create_routine_priv: N
    Alter_routine_priv: N
      Create_user_priv: N
            Event_priv: N
          Trigger_priv: N
Create_tablespace_priv: N
              ssl_type:
            ssl_cipher:
           x509_issuer:
          x509_subject:
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: mysql_native_password
authentication_string: *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE
      password_expired: N
password_last_changed: 2018-03-08 15:21:42
     password_lifetime: NULL
        account_locked: Y
*************************** 4. row ***************************
                  Host: %
                  User: root
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
         Shutdown_priv: Y
          Process_priv: Y
             File_priv: Y
            Grant_priv: Y
       References_priv: Y
            Index_priv: Y
            Alter_priv: Y
          Show_db_priv: Y
            Super_priv: Y
Create_tmp_table_priv: Y
      Lock_tables_priv: Y
          Execute_priv: Y
       Repl_slave_priv: Y
      Repl_client_priv: Y
      Create_view_priv: Y
        Show_view_priv: Y
   Create_routine_priv: Y
    Alter_routine_priv: Y
      Create_user_priv: Y
            Event_priv: Y
          Trigger_priv: Y
Create_tablespace_priv: Y
              ssl_type:
            ssl_cipher:
           x509_issuer:
          x509_subject:
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: mysql_native_password
authentication_string: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
      password_expired: N
password_last_changed: 2018-03-08 15:21:47
     password_lifetime: NULL
        account_locked: N
4 rows in set (0.00 sec)

ERROR:
No query specified
此时 MySQL 只能通过 localhost 进行访问,可以创建新用户来访问 MySQL ,此处为测试环境直接修改让root 用户能被所有 IP 访问
mysql> grant all on *.* to 'root'@'%' identified by '123456';     

查看容器的访问地址
# docker inspect mysql | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Docker搭建MySQL服务器,可以按照以下步骤进行操作: 1. 首先,在你的系统上安装Docker。你可以根据你的操作系统类型,前往Docker官方网站下载并安装Docker。 2. 安装完成后,打开终端或命令行界面,并执行以下命令来拉取MySQLDocker镜像: ``` docker pull mysql ``` 这将从Docker Hub上下载最新的MySQL镜像。 3. 下载完成后,可以使用以下命令来创建并运行一个MySQL容器: ``` docker run -d --name mysql-server -e MYSQL_ROOT_PASSWORD=<password> -p 3306:3306 mysql ``` 这将创建一个名为`mysql-server`的容器,并将MySQL的默认端口3306映射到主机的端口3306上。请将`<password>`替换为你所需的密码。 4. 当容器成功运行后,你可以使用以下命令来进入MySQL容器的bash终端: ``` docker exec -it mysql-server bash ``` 这将进入MySQL容器的命令行界面。 5. 在容器内部的bash终端中,你可以使用以下命令来连接到MySQL服务器: ``` mysql -u root -p ``` 系统将提示你输入密码。输入之前在步骤3中设置的密码。 现在,你已经成功搭建了一个MySQL服务器,并可以在容器内部进行操作。你可以使用各种MySQL客户端工具来连接到主机的3306端口,并管理数据库。如果你需要将MySQL服务器暴露给外部网络,可以在步骤3中更改端口映射的设置。请确保在生产环境中采取必要的安全措施,例如设置强密码和限制访问权限。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值