Laravel Sail配置Mysql主从复制
本文介绍了在Laravel Sail环境下配置MySQL主从复制的完整步骤。通过修改docker-compose.yml文件创建主从数据库容器,分别配置主库和从库的my.cnf文件,设置主库复制权限并记录binlog位置,最后在从库建立主从连接。关键点包括:确保server-id唯一性、正确设置主从连接参数、权限问题处理(如my.cnf文件权限)。文中还提供了常见错误解决方案和参考文档链接,帮助开
·
Laravel Sail 是一个轻量级的命令行界面,用于与 Laravel 的默认 Docker 开发环境进行交互。Sail 提供了一个很好的起点,可以使用 PHP、MySQL 和 Redis 构建 Laravel 应用,而无需事先了解 Docker
系统版本
Ubuntu 24.04
开发环境
Docker 28.3.3
Docker Compose 2.39.1
Laravel 12
实现步骤
- 发布sail配置
php artisan sail:install
- 修改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
- 启动容器
sail php artisan up -d
- 进入主数据库容器
sail exec mysql-write bash
- 编辑配置文件
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/
- 保存更改后重启服务
sail restart mysql-write
- 再次进入主数据库容器,添加用户并赋予权限
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;
- 查看master status,记录File和Position的值
show master status;
- 进入从数据库
sail exec mysql-read bash
- 修改配置(同样需要安装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/
- 重启从数据库
sail restart mysql-read
- 登录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;
- 启动slave
start slave;
- 查看同步状态,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
更多推荐
所有评论(0)