init_mgr.sh 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #!/bin/bash
  2. ROOT_PASS="Root_123456"
  3. MGR_USER="repl"
  4. MGR_PASS="Repl_123456"
  5. echo ">>> 正在执行 MySQL 8.0.36 专用初始化流程 (绕过通道锁定)..."
  6. for i in 1 2 3; do
  7. echo "正在准备节点 mysql80-$i..."
  8. docker exec -i mysql80-$i mysql -uroot -p${ROOT_PASS} <<EOF
  9. STOP GROUP_REPLICATION;
  10. RESET MASTER;
  11. SET SQL_LOG_BIN=0;
  12. CREATE USER IF NOT EXISTS '${MGR_USER}'@'%' IDENTIFIED WITH mysql_native_password BY '${MGR_PASS}';
  13. GRANT REPLICATION SLAVE ON *.* TO '${MGR_USER}'@'%';
  14. GRANT BACKUP_ADMIN ON *.* TO '${MGR_USER}'@'%';
  15. FLUSH PRIVILEGES;
  16. SET SQL_LOG_BIN=1;
  17. EOF
  18. done
  19. # 2. 引导主节点 (在 START 时直接传入凭证)
  20. echo ">>> 引导主节点 mysql80-1..."
  21. docker exec -i mysql80-1 mysql -uroot -p${ROOT_PASS} <<EOF
  22. SET GLOBAL group_replication_bootstrap_group=ON;
  23. START GROUP_REPLICATION USER='${MGR_USER}', PASSWORD='${MGR_PASS}';
  24. SET GLOBAL group_replication_bootstrap_group=OFF;
  25. EOF
  26. # 3. 加入从节点 (同样在 START 时传入凭证)
  27. for i in 2 3; do
  28. echo ">>> 加入从节点 mysql80-$i..."
  29. docker exec -i mysql80-$i mysql -uroot -p${ROOT_PASS} -e "
  30. START GROUP_REPLICATION USER='${MGR_USER}', PASSWORD='${MGR_PASS}';
  31. "
  32. done
  33. echo "----------------------------------------"
  34. docker exec -i mysql80-1 mysql -uroot -p${ROOT_PASS} -e "
  35. SELECT MEMBER_HOST, MEMBER_STATE, MEMBER_ROLE FROM performance_schema.replication_group_members;
  36. "