Laravel Sail 是一个轻量级的命令行界面,用于与 Laravel 的默认 Docker 开发环境进行交互。Sail 提供了一个很好的起点,可以使用 PHP、MySQL 和 Redis 构建 Laravel 应用,而无需事先了解 Docker

系统版本

Ubuntu 24.04

开发环境

Docker 28.3.3
Docker Compose 2.39.1
Laravel 12

实现步骤

  1. 发布sail配置
    php artisan sail:install
    
  2. 修改docker-compose.yml
    # ./docker-compose.yml
    mysql-write:
        image: 'mysql:8.0.43-debian'
        ports:
            - '${FORWARD_DB_PORT:-3306}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ROOT_HOST: '%'
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 1
            MYSQL_EXTRA_OPTIONS: '${MYSQL_EXTRA_OPTIONS}'
        volumes:
            - 'sail-mysql-write:/var/lib/mysql'
            - './docker/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
        networks:
            - sail
        healthcheck:
            test:
                - CMD
                - mysqladmin
                - ping
                - '-p${DB_PASSWORD}'
            retries: 3
            timeout: 5s
    mysql-read:
        image: 'mysql:8.0.43-debian'
        ports:
            - '${FORWARD_DB_PORT:-3307}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ROOT_HOST: '%'
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 1
            MYSQL_EXTRA_OPTIONS: '${MYSQL_EXTRA_OPTIONS}'
        volumes:
            - 'sail-mysql-read:/var/lib/mysql'
            - './docker/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
        networks:
            - sail
        healthcheck:
            test:
                - CMD
                - mysqladmin
                - ping
                - '-p${DB_PASSWORD}'
            retries: 3
            timeout: 5s
    
  3. 启动容器
    sail php artisan up -d
    
  4. 进入主数据库容器
    sail exec mysql-write bash
    
  5. 编辑配置文件
    apt-get update
    apt-get install -y vim
    
    vim /etc/mysql/my.cnf
    
    [mysqld] 
    pid-file        = /var/run/mysqld/mysqld.pid 
    socket          = /var/run/mysqld/mysqld.sock 
    datadir         = /var/lib/mysql 
    secure-file-priv= NULL 
    server-id=1 
    log-bin=mysql-bin 
     
    # Custom config should go here 
    # !includedir /etc/mysql/conf.d/
    
  6. 保存更改后重启服务
    sail restart mysql-write
    
  7. 再次进入主数据库容器,添加用户并赋予权限
    sail exec mysql-write bash
    
    # 登录mysql
    # 默认密码: password
    mysql -uroot -p
    
    # 创建用户
    CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    # 设置密码
    ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    # 赋予复制权限
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    # 刷新权限
    FLUSH PRIVILEGES;
    
  8. 查看master status,记录File和Position的值
    show master status;
    
  9. 进入从数据库
    sail exec mysql-read bash
    
  10. 修改配置(同样需要安装vim)
    vim /etc/mysql/my.cnf
    
    [mysqld] 
    pid-file        = /var/run/mysqld/mysqld.pid 
    socket          = /var/run/mysqld/mysqld.sock 
    datadir         = /var/lib/mysql 
    secure-file-priv= NULL 
    # 注意server-id要保持唯一
    server-id=2 
    log-bin=mysql-bin
    
    # Custom config should go here 
    # !includedir /etc/mysql/conf.d/
    
  11. 重启从数据库
    sail restart mysql-read
    
  12. 登录mysql执行SQL
    # 默认密码: password
    mysql -uroot -p
    
    # 主机ip
    CHANGE MASTER TO master_host = '192.168.xx.xx',
    master_user = 'slave',
    master_password = '123456',
    master_port = 3306,
    master_log_file = '前面记录的File值',
    master_log_pos = 前面记录的Position值,
    master_connect_retry = 30;
    
  13. 启动slave
    start slave;
    
  14. 查看同步状态,Slave_IO_Running和Slave_SQL_Running都为Yes代表配置成功
    show slave status \G;
    
    在这里插入图片描述

踩过的坑:

登录mysql的时候可能会遇到my.cnf被忽略的情况,执行以下命令修改权限即可:

chmod 644 /etc/mysql/my.cnf

参考文档

https://learnku.com/articles/30439
https://blog.csdn.net/qq_49619863/article/details/128047193

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐