启动三个 MySQL 容器
mkdir -p /root/docker/mysql{1,2,3}/config
cp my.cnf mysql1/config/ && cp my.cnf mysql2/config/ && cp my.cnf mysql3/config/
chmod -R 755 mysql*
docker run --name=mysql1 -v /root/docker/mysql1/config/my.cnf:/etc/my.cnf \
-v /root/docker/mysql1/data:/var/lib/mysql -d -p 19013:3306 mysql/mysql-server
docker run --name=mysql2 -v /root/docker/mysql2/config/my.cnf:/etc/my.cnf \
-v /root/docker/mysql2/data:/var/lib/mysql -d -p 19014:3306 mysql/mysql-server
获取初始密码并重置:
docker logs mysql1 2>&1 | grep GENERATED
docker exec -it mysql1 mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
USE mysql;
UPDATE user SET host='%' WHERE user='root';
FLUSH PRIVILEGES;
配置 Master
vim mysql1/config/my.cnf
[mysqld]
log-bin=/var/lib/mysql/binlog
server-id=1
进入 mysql1,查看 binlog 位置,并创建复制用户:
SHOW MASTER STATUS;
-- 记录 File 和 Position 值
CREATE USER 'repl'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'slavepass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
配置 Slave
vim mysql2/config/my.cnf
[mysqld]
server-id=2
进入 mysql2:
CHANGE MASTER TO
MASTER_HOST='宿主机IP或域名',
MASTER_PORT=19013,
MASTER_USER='repl',
MASTER_PASSWORD='slavepass',
MASTER_LOG_FILE='binlog.000003',
MASTER_LOG_POS=156;
START SLAVE;
SHOW SLAVE STATUS\G
Laravel 连不上 MySQL 8.0
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';