Docker-soạn mysql nhiều cơ sở dữ liệu

Đôi khi các ứng dụng của chúng tôi cần nhiều cơ sở dữ liệu, nhưng với một phiên bản máy chủ cơ sở dữ liệu duy nhất. Đề xuất điển hình là mỗi bộ chứa Docker sẽ phục vụ một ứng dụng duy nhất. Đối với cơ sở dữ liệu, điều đó có nghĩa là một máy chủ cơ sở dữ liệu cho mỗi ứng dụng. Đó là kết quả của việc tuân theo một phương pháp hay nhất về mặt lý thuyết, nhưng không phải có phương pháp hay nhất nào khác để tránh các quy trình và chi phí dư thừa sao? . Bộ chứa MySQL cho Docker rất dễ sử dụng, nhưng chỉ hỗ trợ một phiên bản cơ sở dữ liệu duy nhất cho mỗi bộ chứa máy chủ. Trong bài viết này, hãy cùng tìm hiểu cách tiếp tục và định cấu hình bộ chứa MySQL cho Docker để hỗ trợ nhiều cơ sở dữ liệu, mỗi cơ sở dữ liệu có ID người dùng riêng

Docker-soạn mysql nhiều cơ sở dữ liệu

Giả sử bạn có năm ứng dụng để lưu trữ trên một máy chủ, mỗi ứng dụng có một cơ sở dữ liệu riêng biệt? . Điều đó có nghĩa là năm (hoặc nhiều hơn) vùng chứa cho các ứng dụng, nhưng còn máy chủ cơ sở dữ liệu thì sao?

Cách mặc định để định cấu hình bộ chứa MySQL Docker là với các biến môi trường. Các biến môi trường đó hỗ trợ tạo một ID người dùng và một cơ sở dữ liệu

Trường hợp tôi gặp phải đã truyền cảm hứng cho hướng dẫn này là tôi có ba trang web, hai trang web sử dụng Drupal, trang thứ ba sử dụng Wordpress, để triển khai trên một VPS duy nhất. Thực hiện theo phương pháp hay nhất có nghĩa là ba phiên bản bộ chứa MySQL riêng biệt. Sử dụng MySQL theo kiểu mặc định sẽ dẫn đến ba vùng chứa. Nhưng đối với tôi, dường như quá nhiều chi phí để tuân theo thông lệ đó, đặc biệt là vì MySQL có thể dễ dàng hỗ trợ nhiều cơ sở dữ liệu trên mỗi máy chủ

Trước đây, chúng tôi định cấu hình Máy chủ cơ sở dữ liệu (hoặc máy chủ), lưu trữ tất cả dữ liệu từ một danh sách dài các ứng dụng. Kết quả là MySQL hoàn toàn có khả năng lưu trữ nhiều cơ sở dữ liệu trong mỗi phiên bản máy chủ, cùng với nhiều ID người dùng. Các tính năng này là phần giữ lại từ ngày xưa

Điều tôi chọn là tìm ra cách định cấu hình lại phiên bản MySQL dựa trên Docker để hỗ trợ nhiều ID người dùng và nhiều cơ sở dữ liệu. Để duy trì sự tách biệt giữa các cơ sở dữ liệu cho từng ứng dụng, chúng tôi xác định ID người dùng riêng biệt với các quyền truy cập riêng biệt. Do đó, mỗi ứng dụng sẽ chỉ có quyền truy cập vào dữ liệu của riêng mình chứ không phải dữ liệu của các ứng dụng khác

Định cấu hình MySQL để hỗ trợ nhiều cơ sở dữ liệu và nhiều ID người dùng không phải là duy nhất đối với việc triển khai Docker

Định cấu hình vùng chứa MySQL Docker để hỗ trợ nhiều cơ sở dữ liệu và nhiều ID người dùng bắt đầu với cấu hình của một cơ sở dữ liệu và ID người dùng duy nhất. Khi cơ sở dữ liệu đang chạy, bạn có thể sử dụng các lệnh SQL (hoặc PHPMyAdmin) để tạo thêm cơ sở dữ liệu và ID người dùng. Có một ID người dùng cho mỗi cơ sở dữ liệu và mỗi ID người dùng chỉ có quyền truy cập vào cơ sở dữ liệu của mình

Thiết lập máy chủ cơ sở dữ liệu MySQL, trong Docker, để phục vụ nhiều ứng dụng

Điều tôi sẽ làm là mô tả một thiết lập tương tự như những gì tôi đã phát triển trên máy chủ của mình. Trước đây, ba trang web đã được lưu trữ trên VPS được thuê từ nhà cung cấp dịch vụ lưu trữ web, sử dụng máy chủ MySQL cũng được thuê từ nhà cung cấp đó. Thay đổi là thuê một VPS duy nhất, nơi tôi có quyền tự do cài đặt Docker (Docker Swarm) và lưu trữ cơ sở dữ liệu tự quản lý

Bài viết này tập trung vào cấu hình máy chủ MySQL cho mục đích này

Với ý nghĩ đó, chúng ta hãy xem một tệp Docker Compose được đơn giản hóa bắt nguồn từ những gì đang chạy trên máy chủ của tôi

version: '3.8'

services:

    db:
        image: "mysql/mysql-server:5.7"
        container_name: db
        networks:
           - dbnet
        volumes:
           - /opt/db/data:/var/lib/mysql
           - /opt/db:/db
        restart: always
        environment:
           MYSQL_ROOT_PASSWORD: "ROOT PASSWORD"
           MYSQL_ROOT_HOST: "10.28.5.%"
           MYSQL_USER: USER-NAME
           MYSQL_PASSWORD: PASSWORD
           MYSQL_DATABASE: DATABASE-NAME

    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        networks:
            - dbnet
            - servernet
        environment:
            PMA_ARBITRARY: 1
            PHP_UPLOAD_MAX_FILESIZE: 1G
            PHP_MAX_INPUT_VARS: 1G
        ports:
            - "8001:80"

networks:
    dbnet:
        external: true
    servernet:
        external: true

Điều này thiết lập một máy chủ MySQL, cùng với một phiên bản PHPMyAdmin có thể được sử dụng để quản trị cơ sở dữ liệu

Phiên bản MySQL được định cấu hình bằng kiểu điển hình. Một thư mục được gắn vào

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
4 sẽ chứa các tệp cơ sở dữ liệu và lưu giữ chúng bên ngoài vùng chứa. Để tìm hiểu thêm về thiết lập MySQL, hãy xem Thiết lập MySQL bằng Docker trên máy tính xách tay của bạn và Triển khai MySQL để bắt đầu sử dụng tệp Docker Compose

Các biến môi trường chỉ định mật khẩu cho

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5 và cho phép truy cập vào ID đó từ mạng
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
6. Vì ID
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5 có đầy đủ đặc quyền đối với cơ sở dữ liệu, bộ chứa MySQL thường giới hạn quyền truy cập bằng cách sử dụng
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5 đối với bộ chứa đã cho. Tuy nhiên, chúng tôi muốn sử dụng PHPMyAdmin để quản trị cơ sở dữ liệu, yêu cầu quyền truy cập vào ID
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5. Sử dụng
$ docker network create --driver=bridge servernet
0 như được hiển thị ở đây hướng dẫn vùng chứa MySQL tạo ID
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5 thứ hai để truy cập cơ sở dữ liệu, giới hạn quyền truy cập vào các địa chỉ IP phù hợp với
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
6

Do đó, chúng tôi định cấu hình mạng ảo

$ docker network create --driver=bridge servernet
3 để phù hợp với dải IP này. Bởi vì nó được chỉ định là một mạng được xác định bên ngoài, chúng tôi có thể chạy các lệnh
$ docker network create --driver=bridge servernet
4 để thiết lập
$ docker network create --driver=bridge servernet
3

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet

Đây là ví dụ tạo mạng trong Docker, đồng thời kiểm soát dải địa chỉ IP được sử dụng trong mạng. Mạng

$ docker network create --driver=bridge servernet
3 sẽ phân bổ địa chỉ IP từ
$ docker network create --driver=bridge servernet
7, khớp với mặt nạ địa chỉ mà chúng tôi đã định cấu hình trong máy chủ MySQL. Bất kỳ ứng dụng nào yêu cầu quyền truy cập cơ sở dữ liệu cũng phải sử dụng mạng
$ docker network create --driver=bridge servernet
3

Trình điều khiển

$ docker network create --driver=bridge servernet
9 được sử dụng để triển khai Docker thông thường. Nếu bạn đang sử dụng Docker Swarm, thì bạn phải sử dụng trình điều khiển
version: '3.8'

services:

    wp:
        image: wordpress:php7.4-apache
        container_name: wp
        networks:
            - dbnet
            - servernet
        restart: always
        ports:
            - '80:80'
        volumes:
            - /opt/wp/logs:/var/log/apache2:rw
            - /opt/wp/docroot:/var/www/html:rw

networks:
    dbnet:
        external: true
    servernet:
        external: true
0 để thay thế

Vùng chứa PHPMyAdmin cũng được kết nối với mạng

$ docker network create --driver=bridge servernet
3 để có quyền truy cập vào cơ sở dữ liệu. Nó cũng được kết nối với
version: '3.8'

services:

    wp:
        image: wordpress:php7.4-apache
        container_name: wp
        networks:
            - dbnet
            - servernet
        restart: always
        ports:
            - '80:80'
        volumes:
            - /opt/wp/logs:/var/log/apache2:rw
            - /opt/wp/docroot:/var/www/html:rw

networks:
    dbnet:
        external: true
    servernet:
        external: true
2 có thể được sử dụng cho các dịch vụ trang web công cộng. Bằng cách sử dụng
version: '3.8'

services:

    wp:
        image: wordpress:php7.4-apache
        container_name: wp
        networks:
            - dbnet
            - servernet
        restart: always
        ports:
            - '80:80'
        volumes:
            - /opt/wp/logs:/var/log/apache2:rw
            - /opt/wp/docroot:/var/www/html:rw

networks:
    dbnet:
        external: true
    servernet:
        external: true
3, PHPMyAdmin sẽ luôn nhắc các chi tiết truy cập cơ sở dữ liệu. Nó có một cổng đã xuất bản,
version: '3.8'

services:

    wp:
        image: wordpress:php7.4-apache
        container_name: wp
        networks:
            - dbnet
            - servernet
        restart: always
        ports:
            - '80:80'
        volumes:
            - /opt/wp/logs:/var/log/apache2:rw
            - /opt/wp/docroot:/var/www/html:rw

networks:
    dbnet:
        external: true
    servernet:
        external: true
4, vì vậy chúng tôi có thể truy cập nó từ máy tính xách tay của mình

Chúng tôi tạo một mạng khác,

version: '3.8'

services:

    wp:
        image: wordpress:php7.4-apache
        container_name: wp
        networks:
            - dbnet
            - servernet
        restart: always
        ports:
            - '80:80'
        volumes:
            - /opt/wp/logs:/var/log/apache2:rw
            - /opt/wp/docroot:/var/www/html:rw

networks:
    dbnet:
        external: true
    servernet:
        external: true
2

$ docker network create --driver=bridge servernet

Chúng tôi sẽ không làm gì nhiều với mạng này trong hướng dẫn này. Trên máy chủ của tôi có một proxy từ xa dựa trên NGINX được sử dụng để triển khai HTTPS cho các trang web. Tất cả proxy ngược và vùng chứa ứng dụng đều đính kèm với

version: '3.8'

services:

    wp:
        image: wordpress:php7.4-apache
        container_name: wp
        networks:
            - dbnet
            - servernet
        restart: always
        ports:
            - '80:80'
        volumes:
            - /opt/wp/logs:/var/log/apache2:rw
            - /opt/wp/docroot:/var/www/html:rw

networks:
    dbnet:
        external: true
    servernet:
        external: true
2. Bộ chứa cơ sở dữ liệu không được kết nối
version: '3.8'

services:

    wp:
        image: wordpress:php7.4-apache
        container_name: wp
        networks:
            - dbnet
            - servernet
        restart: always
        ports:
            - '80:80'
        volumes:
            - /opt/wp/logs:/var/log/apache2:rw
            - /opt/wp/docroot:/var/www/html:rw

networks:
    dbnet:
        external: true
    servernet:
        external: true
2 có nghĩa là giữ cho cơ sở dữ liệu được cách ly với Internet công cộng

Xác định một dịch vụ ví dụ sử dụng cơ sở dữ liệu

Chúng tôi sẽ không thảo luận về các dịch vụ sử dụng cơ sở dữ liệu. Chúng tôi biết rằng sẽ có nhiều dịch vụ như vậy, vì vậy hãy nói về một dịch vụ ví dụ

version: '3.8'

services:

    wp:
        image: wordpress:php7.4-apache
        container_name: wp
        networks:
            - dbnet
            - servernet
        restart: always
        ports:
            - '80:80'
        volumes:
            - /opt/wp/logs:/var/log/apache2:rw
            - /opt/wp/docroot:/var/www/html:rw

networks:
    dbnet:
        external: true
    servernet:
        external: true

Điều này bắt nguồn từ một bài viết đồng hành Môi trường phát triển cục bộ Wordpress với Docker và Docker Compose trên máy tính xách tay của bạn

Nó sử dụng bộ chứa

version: '3.8'

services:

    wp:
        image: wordpress:php7.4-apache
        container_name: wp
        networks:
            - dbnet
            - servernet
        restart: always
        ports:
            - '80:80'
        volumes:
            - /opt/wp/logs:/var/log/apache2:rw
            - /opt/wp/docroot:/var/www/html:rw

networks:
    dbnet:
        external: true
    servernet:
        external: true
8 tiêu chuẩn để quản lý một phiên bản Wordpress. Một số thư mục được gắn vào vùng chứa để duy trì nội dung của chúng

Trong sử dụng sản xuất, chúng tôi khuyên bạn nên triển khai HTTPS. Mặc dù HTTPS có thể được triển khai trong vùng chứa này, tôi sử dụng NGINX-Proxy-Manager để làm như vậy. Đây là một proxy ngược được xây dựng xung quanh NGINX và sử dụng Lets Encrypt để mua chứng chỉ SSL. Do đó, vùng chứa này chỉ cần xuất cổng

version: '3.8'

services:

    wp:
        image: wordpress:php7.4-apache
        container_name: wp
        networks:
            - dbnet
            - servernet
        restart: always
        ports:
            - '80:80'
        volumes:
            - /opt/wp/logs:/var/log/apache2:rw
            - /opt/wp/docroot:/var/www/html:rw

networks:
    dbnet:
        external: true
    servernet:
        external: true
9 vì NGINX-Proxy-Manager đảm nhận HTTPS

Đối với hầu hết các ứng dụng (Drupal, Gogs, Jenkins, Kanboard, v.v.), chỉ cần hiển thị cổng

version: '3.8'

services:

    wp:
        image: wordpress:php7.4-apache
        container_name: wp
        networks:
            - dbnet
            - servernet
        restart: always
        ports:
            - '80:80'
        volumes:
            - /opt/wp/logs:/var/log/apache2:rw
            - /opt/wp/docroot:/var/www/html:rw

networks:
    dbnet:
        external: true
    servernet:
        external: true
9 và để NGINX-Proxy-Manager xử lý HTTPS và chuyển hướng từ cổng
version: '3.8'

services:

    wp:
        image: wordpress:php7.4-apache
        container_name: wp
        networks:
            - dbnet
            - servernet
        restart: always
        ports:
            - '80:80'
        volumes:
            - /opt/wp/logs:/var/log/apache2:rw
            - /opt/wp/docroot:/var/www/html:rw

networks:
    dbnet:
        external: true
    servernet:
        external: true
9 sang cổng
CREATE USER 'root'@'localhost'
    IDENTIFIED BY 'PASSWORD';
GRANT ALL 
    ON *.* 
    TO 'root'@'localhost';
2. Nhưng Wordpress rất khó triển khai HTTPS và cần phải cài đặt plugin SSL thực sự đơn giản

Tên máy chủ ảo cho vùng chứa được xác định bởi tên dịch vụ và/hoặc thuộc tính

CREATE USER 'root'@'localhost'
    IDENTIFIED BY 'PASSWORD';
GRANT ALL 
    ON *.* 
    TO 'root'@'localhost';
3. Điều này rất quan trọng khi định cấu hình proxy ngược như vừa thảo luận. Proxy đảo ngược phải biết tên máy chủ ảo nào để chuyển tiếp lưu lượng HTTP

Cấu trúc các thư mục để chứa cơ sở dữ liệu cộng với nhiều bộ chứa ứng dụng

Hãy nói về một cân nhắc thực tế - cấu trúc thư mục cần thiết để chứa dữ liệu liên quan đến cơ sở dữ liệu và bộ chứa ứng dụng

Trên máy chủ của tôi, tôi đã khai báo thư mục

CREATE USER 'root'@'localhost'
    IDENTIFIED BY 'PASSWORD';
GRANT ALL 
    ON *.* 
    TO 'root'@'localhost';
4 là nơi lưu trữ dữ liệu về từng vùng chứa. Có thể về mặt kỹ thuật đó không phải là địa điểm chính xác, nhưng thư mục đó trống rỗng một cách thuận tiện khi máy chủ được tạo

Điều này có nghĩa là bộ chứa MySQL có một thư mục

CREATE USER 'root'@'localhost'
    IDENTIFIED BY 'PASSWORD';
GRANT ALL 
    ON *.* 
    TO 'root'@'localhost';
5 chứa

  • CREATE USER 'root'@'localhost'
        IDENTIFIED BY 'PASSWORD';
    GRANT ALL 
        ON *.* 
        TO 'root'@'localhost';
    
    6 - Tệp Soạn xác định dịch vụ
  • CREATE USER 'root'@'localhost'
        IDENTIFIED BY 'PASSWORD';
    GRANT ALL 
        ON *.* 
        TO 'root'@'localhost';
    
    7 - Tệp dữ liệu cho cơ sở dữ liệu
  • Cân nhắc thêm giá đỡ để xuất
    CREATE USER 'root'@'localhost'
        IDENTIFIED BY 'PASSWORD';
    GRANT ALL 
        ON *.* 
        TO 'root'@'localhost';
    
    8 để bạn có thể dễ dàng xem nhật ký
  • Cân nhắc thêm cài đặt cấu hình để thay đổi ổ cắm MySQL để nó không hiển thị trong thư mục dữ liệu

Đối với mỗi ứng dụng, một cấu trúc tương tự được tuân theo. Cụ thể, có một thư mục chứa

CREATE USER 'root'@'localhost'
    IDENTIFIED BY 'PASSWORD';
GRANT ALL 
    ON *.* 
    TO 'root'@'localhost';
9 cộng với bất kỳ tệp dữ liệu nào

Đối với ví dụ Wordpress, đây là

  • CREATE USER 'root'@'MYSQL_ROOT_HOST'
        IDENTIFIED BY 'PASSWORD';
    GRANT ALL 
        ON *.* 
        TO 'root'@'MYSQL_ROOT_HOST'
        WITH GRANT OPTION;
    
    0 - Hiển thị tệp nhật ký để dễ xem
  • CREATE USER 'root'@'MYSQL_ROOT_HOST'
        IDENTIFIED BY 'PASSWORD';
    GRANT ALL 
        ON *.* 
        TO 'root'@'MYSQL_ROOT_HOST'
        WITH GRANT OPTION;
    
    1 - Duy trì các tệp Wordpress

Tất cả điều này xử lý việc thiết lập, vì vậy bây giờ hãy nói về cấu hình MySQL để hỗ trợ nhiều ứng dụng

Kết nối dưới dạng
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5 với cơ sở dữ liệu MySQL từ các vùng chứa khác

Trong

CREATE USER 'root'@'localhost'
    IDENTIFIED BY 'PASSWORD';
GRANT ALL 
    ON *.* 
    TO 'root'@'localhost';
9 chúng tôi đã giới thiệu cho MySQL, chúng tôi đã bao gồm một bộ chứa PHPMyAdmin. Đây là một công cụ phổ biến để quản lý máy chủ MySQL. Để có hiệu lực đầy đủ, tốt nhất là nếu PHPMyAdmin được kết nối với tài khoản MySQL có TẤT CẢ các đặc quyền đối với máy chủ. Đối với vùng chứa
CREATE USER 'root'@'MYSQL_ROOT_HOST'
    IDENTIFIED BY 'PASSWORD';
GRANT ALL 
    ON *.* 
    TO 'root'@'MYSQL_ROOT_HOST'
    WITH GRANT OPTION;
4, tài khoản đặc quyền đầy đủ đó có tên là
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5

Hãy bắt đầu bằng cách tìm hiểu cách chúng tôi cho phép truy cập ID

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5 từ các vùng chứa không phải vùng chứa cơ sở dữ liệu. Theo mặc định, bộ chứa MySQL chỉ cho phép kết nối
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5 từ máy chủ lưu trữ cục bộ. Nhưng để hỗ trợ bộ chứa PHPMyAdmin này, chúng tôi cần hỗ trợ các kết nối từ các máy chủ khác. Hãy nhớ rằng trong Docker, mỗi phiên bản vùng chứa hoạt động giống như máy chủ của chính nó

Như chúng ta đã thảo luận, theo mặc định, bộ chứa MySQL hạn chế kết nối tới ID người dùng

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5 với chính bộ chứa MySQL. Bằng cách định cấu hình biến
$ docker network create --driver=bridge servernet
0, bộ chứa MySQL sẽ định cấu hình quyền truy cập vào ID
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5 một cách thích hợp. Nhưng chúng ta sẽ học được điều gì đó bằng cách nghiên cứu cách thức hoạt động của nó

Trong MySQL, một tài khoản được tạo bằng cách thêm một mục vào bảng

$ docker exec -it db mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.33 MySQL Community Server (GPL)
...

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> CREATE USER 'root'@'10.28.5.%' IDENTIFIED BY 'r00tr00t';
Query OK, 0 rows affected (0.03 sec)

mysql> GRANT ALL ON *.* TO 'root'@'10.28.5.%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql>
1. Một cách để làm điều đó là sử dụng lệnh
$ docker exec -it db mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.33 MySQL Community Server (GPL)
...

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> CREATE USER 'root'@'10.28.5.%' IDENTIFIED BY 'r00tr00t';
Query OK, 0 rows affected (0.03 sec)

mysql> GRANT ALL ON *.* TO 'root'@'10.28.5.%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql>
2 trong SQL. Tài liệu MySQL về cách thêm tài khoản và gán đặc quyền rất đáng để bạn dành thời gian đọc.

Chỉ sử dụng

$ docker exec -it db mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.33 MySQL Community Server (GPL)
...

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> CREATE USER 'root'@'10.28.5.%' IDENTIFIED BY 'r00tr00t';
Query OK, 0 rows affected (0.03 sec)

mysql> GRANT ALL ON *.* TO 'root'@'10.28.5.%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql>
3 tương đương với SQL sau

CREATE USER 'root'@'localhost'
    IDENTIFIED BY 'PASSWORD';
GRANT ALL 
    ON *.* 
    TO 'root'@'localhost';

Thao tác này tạo ID người dùng

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5 khớp với các kết nối từ
$ docker exec -it db mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.33 MySQL Community Server (GPL)
...

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> CREATE USER 'root'@'10.28.5.%' IDENTIFIED BY 'r00tr00t';
Query OK, 0 rows affected (0.03 sec)

mysql> GRANT ALL ON *.* TO 'root'@'10.28.5.%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql>
5. Trong bộ chứa Docker,
$ docker exec -it db mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.33 MySQL Community Server (GPL)
...

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> CREATE USER 'root'@'10.28.5.%' IDENTIFIED BY 'r00tr00t';
Query OK, 0 rows affected (0.03 sec)

mysql> GRANT ALL ON *.* TO 'root'@'10.28.5.%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql>
5 chính là bộ chứa

Chúng tôi đã xem xét rất nhiều chi tiết về ID người dùng trong MySQL trong. Hiểu MySQL về lỗi Truy cập bị từ chối trong hoặc ngoài bộ chứa Docker Nhưng tóm tắt là đối với mọi kết nối đến MySQL, nó khớp các thuộc tính kết nối với các mục trong bảng

$ docker exec -it db mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.33 MySQL Community Server (GPL)
...

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> CREATE USER 'root'@'10.28.5.%' IDENTIFIED BY 'r00tr00t';
Query OK, 0 rows affected (0.03 sec)

mysql> GRANT ALL ON *.* TO 'root'@'10.28.5.%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql>
1

Sau đó, lệnh

$ docker exec -it db mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.33 MySQL Community Server (GPL)
...

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> CREATE USER 'root'@'10.28.5.%' IDENTIFIED BY 'r00tr00t';
Query OK, 0 rows affected (0.03 sec)

mysql> GRANT ALL ON *.* TO 'root'@'10.28.5.%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql>
8 sẽ xác định mức độ truy cập mà tài khoản đã xác định có. Bởi vì đó là người dùng
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5, chúng tôi sử dụng
mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
0 để cấp cho tài khoản toàn quyền truy cập vào mọi thứ cuối cùng. Các tùy chọn truy cập có sẵn trong lệnh
$ docker exec -it db mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.33 MySQL Community Server (GPL)
...

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> CREATE USER 'root'@'10.28.5.%' IDENTIFIED BY 'r00tr00t';
Query OK, 0 rows affected (0.03 sec)

mysql> GRANT ALL ON *.* TO 'root'@'10.28.5.%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql>
8 là

Tùy chọnMô tảALLĐiều này sẽ cho phép người dùng mysql có toàn quyền truy cập vào cơ sở dữ liệu đã chỉ định hoặc toàn quyền truy cập vào tất cả các cơ sở dữ liệuCHỌNCho phép người dùng chọn dữ liệu từ các bảngINSERTCho phép người dùng chèn dữ liệu vào các bảngUPDATECho phép người dùng cập nhật dữ liệu trong các bảngDELETECho phép người dùng xóa các hàng trong bảngCREATECho phép người dùng tạo cơ sở dữ liệu và bảng mớiDROPCho phép . TÙY CHỌN CẤP Cho phép người dùng cấp hoặc xóa các đặc quyền của người dùng khác

Để kiểm tra điều này, trong

CREATE USER 'root'@'localhost'
    IDENTIFIED BY 'PASSWORD';
GRANT ALL 
    ON *.* 
    TO 'root'@'localhost';
9 hãy nhận xét cài đặt
$ docker network create --driver=bridge servernet
0, sau đó chạy
mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
4 để khởi chạy các thùng chứa. Sau khi cơ sở dữ liệu bắt đầu, trong trình duyệt web của bạn, hãy truy cập
mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
5 và bạn sẽ tìm thấy PHPMyAdmin. Nhập các chi tiết đăng nhập này

Docker-soạn mysql nhiều cơ sở dữ liệu

Khi nhấp vào nút Bắt đầu, bạn sẽ thấy một lỗi. Không có cài đặt

$ docker network create --driver=bridge servernet
0, chỉ có thể truy cập ID người dùng
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5 từ bên trong vùng chứa MySQL

Một thử nghiệm khác là đăng nhập bằng các thông tin đăng nhập này

Docker-soạn mysql nhiều cơ sở dữ liệu

Bạn sẽ có thể dễ dàng đăng nhập bằng ID

mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
8. Quyền truy cập duy nhất của bạn sẽ là cơ sở dữ liệu
mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
9

Biến

$ docker network create --driver=bridge servernet
0 là cách chúng tôi hỗ trợ quyền truy cập đặc quyền đầy đủ từ một máy chủ khác. Biến này thay đổi mọi thứ để SQL sau được thực thi

CREATE USER 'root'@'MYSQL_ROOT_HOST'
    IDENTIFIED BY 'PASSWORD';
GRANT ALL 
    ON *.* 
    TO 'root'@'MYSQL_ROOT_HOST'
    WITH GRANT OPTION;

Lệnh đầu tiên rõ ràng, nó tạo ID người dùng

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5, được phép truy cập cơ sở dữ liệu từ các địa chỉ IP khớp với nội dung của
$ docker network create --driver=bridge servernet
0, sử dụng mật khẩu đã cho. Lệnh thứ hai cho phép ID người dùng này có tất cả các đặc quyền trên tất cả các cơ sở dữ liệu và tất cả các bảng. Ngoài ra, do cài đặt
CREATE USER 'wpuser'@'10.%'
    IDENTIFIED BY 'w0rdw0rd';
GRANT ALL 
    ON wpdb.* 
    TO 'wpuser'@'10.%';
DROP USER 'wpuser'@'%';
3, ID người dùng này có thể tạo ID người dùng khác và cấp đặc quyền cho những ID đó

Sau đó, chúng ta cung cấp giá trị nào trong biến

$ docker network create --driver=bridge servernet
0 để đạt được hiệu quả mong muốn?

LoạiSampleDiscussionTên miền đủ điều kiện
CREATE USER 'wpuser'@'10.%'
    IDENTIFIED BY 'w0rdw0rd';
GRANT ALL 
    ON wpdb.* 
    TO 'wpuser'@'10.%';
DROP USER 'wpuser'@'%';
5Kết nối đến chỉ có thể đến từ máy chủ được đặt tênĐịa chỉ IP đủ điều kiện172. 20. 3. 5Kết nối đến chỉ có thể đến từ địa chỉ IP được đặt tên Tên miền Wildcard
CREATE USER 'wpuser'@'10.%'
    IDENTIFIED BY 'w0rdw0rd';
GRANT ALL 
    ON wpdb.* 
    TO 'wpuser'@'10.%';
DROP USER 'wpuser'@'%';
6,
CREATE USER 'wpuser'@'10.%'
    IDENTIFIED BY 'w0rdw0rd';
GRANT ALL 
    ON wpdb.* 
    TO 'wpuser'@'10.%';
DROP USER 'wpuser'@'%';
7Kết nối đến có thể đến từ bất kỳ máy chủ nào khớp với tên miền Địa chỉ IP Wildcard172. %, 198. 51. 100. 0/255. 255. 255. 0Kết nối đến có thể đến từ bất kỳ máy chủ nào có địa chỉ IP phù hợp Ký tự đại diện%Bất kỳ tên máy chủ hoặc địa chỉ IP nào cũng sẽ khớp

Trong ví dụ trên, chúng tôi đã chỉ định

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
6 làm địa chỉ IP ký tự đại diện trong
$ docker network create --driver=bridge servernet
0. Tuy nhiên, theo các hướng dẫn hiện tại, cơ sở dữ liệu đã được khởi tạo mà không sử dụng biến đó, nghĩa là chúng tôi không thể đăng nhập với tên
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5 từ PHPMyAdmin. Địa chỉ IP ký tự đại diện đã được chọn để khớp với mạng con được gán cho mạng
$ docker network create --driver=bridge servernet
3

Chúng tôi có thể định cấu hình lại cơ sở dữ liệu bằng cách thay đổi

$ docker network create --driver=bridge servernet
0 trong tệp Soạn. Nhưng thay vào đó, hãy làm thủ công

$ docker exec -it db mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.33 MySQL Community Server (GPL)
...

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> CREATE USER 'root'@'10.28.5.%' IDENTIFIED BY 'r00tr00t';
Query OK, 0 rows affected (0.03 sec)

mysql> GRANT ALL ON *.* TO 'root'@'10.28.5.%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql>

Điều này kết nối trực tiếp với vùng chứa MySQL để đăng nhập vào máy chủ cơ sở dữ liệu. Điều này hoạt động vì lệnh

CREATE DATABASE appdb;
3 đang thực thi trong cùng một vùng chứa với cơ sở dữ liệu và do đó nỗ lực kết nối đến từ
$ docker exec -it db mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.33 MySQL Community Server (GPL)
...

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> CREATE USER 'root'@'10.28.5.%' IDENTIFIED BY 'r00tr00t';
Query OK, 0 rows affected (0.03 sec)

mysql> GRANT ALL ON *.* TO 'root'@'10.28.5.%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql>
5. Sau đó, chúng tôi chạy các lệnh SQL cần thiết để thêm một phiên bản mới của ID người dùng
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5, lần này với
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
6 làm tên máy chủ. Nó nhận được các đặc quyền cần thiết, sau đó chúng tôi chạy
CREATE DATABASE appdb;
7 để đảm bảo máy chủ được cập nhật đúng cách

Sau khi chạy cái này, bây giờ bạn có thể đăng nhập bằng PHPMyAdmin bằng cách sử dụng

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5 từ vùng chứa
CREATE DATABASE appdb;
9

Điều này chứng minh rằng chúng ta có thể thêm ID người dùng bổ sung bằng cách sử dụng các lệnh SQL đơn giản

Kết nối với cơ sở dữ liệu bằng ID người dùng đầu tiên

Cho đến nay, chúng tôi đã thiết lập cơ sở dữ liệu và bộ chứa PHPMyAdmin, sau đó chúng tôi thiết lập ID người dùng

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5 để chúng tôi có thể sử dụng PHPMyAdmin để quản lý cơ sở dữ liệu. Chúng tôi cũng sẽ sử dụng PHPMyAdmin để kiểm tra quyền truy cập bằng các ID người dùng khác nhau

Khi cơ sở dữ liệu được tạo, chúng tôi đã chỉ định ID người dùng

mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
8 và cơ sở dữ liệu
mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
9. Bạn có thể đã kiểm tra quyền truy cập vào cơ sở dữ liệu này bằng cách đăng nhập bằng các thông tin đăng nhập này. Nếu không, hãy đăng xuất khỏi PHPMyAdmin và đăng nhập lại

Docker-soạn mysql nhiều cơ sở dữ liệu

Bạn sẽ có thể dễ dàng đăng nhập bằng ID

mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
8. Quyền truy cập duy nhất của bạn sẽ là cơ sở dữ liệu
mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
9 và
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
05

Nói cách khác, chúng tôi đã xác minh rằng

mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
8 bị giới hạn một cách phù hợp về những gì nó có thể làm. Chúng tôi có thể xác minh điều này bằng cách xem TRỢ CẤP cho
mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
8

mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>

ID người dùng này có TẤT CẢ các đặc quyền đối với

mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
9 nhưng không có gì khác

Thêm cơ sở dữ liệu bổ sung và ID người dùng vào cơ sở dữ liệu MySQL

Đây là nơi chúng ta bắt đầu tìm hiểu và tìm hiểu cách thiết lập nhiều cơ sở dữ liệu và nhiều ID người dùng trong cơ sở dữ liệu MySQL. Tham khảo lại phần trước về ID

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5 và suy ngẫm về các lệnh chúng tôi đã chạy. Cụ thể, bằng cách chạy
$ docker exec -it db mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.33 MySQL Community Server (GPL)
...

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> CREATE USER 'root'@'10.28.5.%' IDENTIFIED BY 'r00tr00t';
Query OK, 0 rows affected (0.03 sec)

mysql> GRANT ALL ON *.* TO 'root'@'10.28.5.%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql>
2, chúng tôi đã tạo phiên bản thứ hai của ID người dùng
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5. Trường hợp đầu tiên là
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
12, trường hợp thứ hai là
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
13. Hai mục này là các mục riêng biệt trong bảng
$ docker exec -it db mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.33 MySQL Community Server (GPL)
...

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> CREATE USER 'root'@'10.28.5.%' IDENTIFIED BY 'r00tr00t';
Query OK, 0 rows affected (0.03 sec)

mysql> GRANT ALL ON *.* TO 'root'@'10.28.5.%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql>
1 và có thể dễ dàng có các đặc quyền truy cập khác nhau

Để xem điều này, trong PHPMyAdmin, đăng nhập vào tài khoản

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5, bạn có thể chạy truy vấn
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
16 và xem điều này

Docker-soạn mysql nhiều cơ sở dữ liệu

Lưu ý rằng có hai hàng trong đó

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
17 bằng với
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5. Đó là tất cả những gì xảy ra khi chúng ta tạo một ID người dùng khác trong MySQL

Một điều khác cần lưu ý là ID người dùng

mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
8 được phép truy cập từ
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
20. Bạn có nghĩ rằng đó là quá dễ dãi?

Sửa đổi ID người dùng MySQL hiện có

Để khắc phục điều đó, hãy chạy các lệnh này

CREATE USER 'wpuser'@'10.%'
    IDENTIFIED BY 'w0rdw0rd';
GRANT ALL 
    ON wpdb.* 
    TO 'wpuser'@'10.%';
DROP USER 'wpuser'@'%';

Điều này tạo ID người dùng mới,

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
22, có cùng mức độ kiểm soát đối với
mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
9 mà
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
24 đã có. Sau đó chúng tôi xóa ID người dùng cũ. Chạy lại
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
16 và bạn sẽ thấy thay đổi đã được thực hiện. Và, bạn vẫn có thể đăng nhập vào PHPMyAdmin bằng cách sử dụng
mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
8

Có một lệnh

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
27, nhưng dường như nó không có khả năng thay đổi
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
24 thành
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
22. Điều đó dẫn chúng tôi đến loạt lệnh này, trong đó chúng tôi tạo ID người dùng mới và xóa ID cũ

Tạo cơ sở dữ liệu mới trong MySQL và khớp ID người dùng

Bây giờ chúng ta có thể nói về việc tạo cơ sở dữ liệu mới và gán ID người dùng

Trước tiên, việc tạo cơ sở dữ liệu yêu cầu đăng nhập bằng tên

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5, sau đó chạy lệnh này

CREATE DATABASE appdb;

Điều này không tạo bất kỳ bảng nào, chỉ tạo cơ sở dữ liệu

Các phương pháp hay nhất là tạo ID người dùng để đi cùng với cơ sở dữ liệu này. ID người dùng đó chỉ được cấp quyền truy cập vào cơ sở dữ liệu này, giống như chúng ta thấy ở trên với tài khoản

mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
8. Thực tiễn tốt nhất về hệ quả là ứng dụng sử dụng tài khoản đó để truy cập cơ sở dữ liệu, để đảm bảo ứng dụng không thể bước lên cơ sở dữ liệu thuộc sở hữu của các ứng dụng khác

Chúng tôi có thể dễ dàng ngoại suy từ các tài khoản

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5 và
mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
8 mà chúng tôi vừa tạo và xem phải làm gì

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
0

Đây là một khởi đầu tốt vì nó giới hạn quyền truy cập vào một bảng cụ thể. Nhưng có một số cài đặt

$ docker exec -it db mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.33 MySQL Community Server (GPL)
...

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> CREATE USER 'root'@'10.28.5.%' IDENTIFIED BY 'r00tr00t';
Query OK, 0 rows affected (0.03 sec)

mysql> GRANT ALL ON *.* TO 'root'@'10.28.5.%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql>
8 khả thi khác để sử dụng bên cạnh
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
35

Ví dụ, một sự sắp xếp phổ biến hơn có thể là

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
1

Điều này cho phép các hoạt động điển hình của ứng dụng (tạo, đọc, cập nhật, xóa) trên các hàng của bảng cơ sở dữ liệu, cũng như khả năng tạo và xóa bảng

Hãy tiếp tục và tạo ID người dùng

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
36 như được hiển thị ở đây, với quyền truy cập vào cơ sở dữ liệu
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
37. Bạn có thể kiểm tra bảng
$ docker exec -it db mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.33 MySQL Community Server (GPL)
...

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> CREATE USER 'root'@'10.28.5.%' IDENTIFIED BY 'r00tr00t';
Query OK, 0 rows affected (0.03 sec)

mysql> GRANT ALL ON *.* TO 'root'@'10.28.5.%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql>
1 để đảm bảo người dùng được thiết lập như bạn mong đợi

Chúng ta cũng có thể kiểm tra các chi tiết bằng lệnh này

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
2

Lệnh

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
39 hoạt động như tên gọi, nó hiển thị quyền truy cập được gán cho ID người dùng được chỉ định

Sau khi xác minh rằng cơ sở dữ liệu và ID người dùng đã được tạo như mong đợi, hãy quay lại PHPMyAdmin và đăng xuất. Sau đó, bạn có thể đăng nhập bằng ID của

mysql> SHOW GRANTS FOR wpuser;
+--------------------------------------------------+
| Grants for wpuser@%                              |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%'               |
| GRANT ALL PRIVILEGES ON `wpdb`.* TO 'wpuser'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
8 và
$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
36, cũng như bất kỳ ID nào khác mà bạn có thể đã tạo. Bạn nên xác minh rằng đối với mỗi ID người dùng, chỉ có cơ sở dữ liệu dự kiến ​​​​được hiển thị

Bản tóm tắt

Trong hướng dẫn này, chúng ta đã học được rằng mặc dù bộ chứa MySQL Docker chỉ hỗ trợ ID người dùng

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
5 và một ID người dùng khác, nhưng chúng ta có thể tiếp tục và tạo nhiều cơ sở dữ liệu cũng như ID người dùng. Tất cả những gì cần làm là sử dụng các lệnh SQL để tạo cơ sở dữ liệu, ID người dùng và cấp quyền truy cập

Đó là, trước tiên chúng tôi đã điều tra xem bộ chứa MySQL làm gì để tạo cơ sở dữ liệu và ID người dùng ban đầu. Sau đó, chúng tôi đã sử dụng cùng một mẫu để tạo cơ sở dữ liệu và ID người dùng khác, gán cho nó các đặc quyền tương tự

Những gì chúng tôi đã học được là chúng tôi có thể tạo bất kỳ sự kết hợp nào của cơ sở dữ liệu, ID người dùng và quyền truy cập bằng cách sử dụng các câu lệnh SQL đơn giản

$ docker network create \
    --driver=bridge \
    --subnet=10.28.5.0/24 \
    dbnet
3

Đây là những lệnh bắt buộc, bạn có thể tự do trộn và kết hợp theo ý muốn

Mặc dù vùng chứa MySQL không hỗ trợ trực tiếp nhiều người dùng và cơ sở dữ liệu, nhưng một số lệnh SQL đơn giản cho phép chúng tôi định cấu hình máy chủ cơ sở dữ liệu theo ý thích của mình

Giới thiệu về tác giả)

Docker-soạn mysql nhiều cơ sở dữ liệu
David Herron. David Herron là một nhà văn và kỹ sư phần mềm tập trung vào việc sử dụng công nghệ một cách khôn ngoan. Anh đặc biệt quan tâm đến các công nghệ năng lượng sạch như năng lượng mặt trời, năng lượng gió và ô tô điện. David đã làm việc gần 30 năm ở Thung lũng Silicon về phần mềm từ hệ thống thư điện tử, truyền phát video, ngôn ngữ lập trình Java và đã xuất bản một số cuốn sách về Node. lập trình js và xe điện.

Chạy MongoDB với Docker và Docker Compose Thiết lập bộ chứa PHPMyAdmin và Wordpress Docker bằng MySQL hiện có

Làm cách nào để tạo nhiều cơ sở dữ liệu trong MySQL Docker?

Hãy bắt đầu tạo cơ sở dữ liệu nhiều môi trường . /trong đó. /docker-entrypoint-initdb. `./init:/docker-entrypoint-initdb. tệp d` . sau đó bạn sẽ thấy trong bảng điều khiển “init/01. sql” sẽ được thực thi và tạo một bài kiểm tra cơ sở dữ liệu mới khi khởi động docker.

Bạn có thể có nhiều cơ sở dữ liệu MySQL không?

Trong Cơ sở dữ liệu Azure cho máy chủ MySQL, bạn có thể tạo một hoặc nhiều cơ sở dữ liệu . Bạn có thể chọn tạo một cơ sở dữ liệu trên mỗi máy chủ để sử dụng tất cả tài nguyên hoặc tạo nhiều cơ sở dữ liệu để chia sẻ tài nguyên.

Bạn có thể soạn nhiều Docker không?

Với Docker soạn thảo, bạn có thể định cấu hình và bắt đầu nhiều vùng chứa bằng một tệp yaml duy nhất . Điều này thực sự hữu ích nếu bạn đang làm việc trên một ngăn xếp công nghệ với nhiều công nghệ.

Hai bộ chứa MySQL có thể sử dụng cùng một khối lượng Docker không?

Không,MySQL và MariaDB (các tài liệu nginx_proxy_manager đó không phải là cơ sở dữ liệu lưu trữ dùng chung và chỉ có thể phát hiện giao diện của nhau. Bạn có thể có thể sử dụng một phiên bản cơ sở dữ liệu được chia sẻ giữa hai phiên bản nginx_proxy_manager.