MySQL 8.4 主从
| 服务器 IP | 主机角色 |
|---|---|
| 192.168.10.2 | MySQL Master |
| 192.168.10.3 | MySQL Slave |
MySQL Master
-
下载 mysql 安装包
- 服务器支持访问互联网
- 服务器不支持访问互联网
wget https://pdpublic.mingdao.com/private-deployment/offline/common/mysql-8.4.10-linux-glibc2.17-x86_64.tar.xz# mysql 安装包文件下载链接,下载完成后上传到部署服务器https://pdpublic.mingdao.com/private-deployment/offline/common/mysql-8.4.10-linux-glibc2.17-x86_64.tar.xz -
解压至安装目录
tar -xvf mysql-8.4.10-linux-glibc2.17-x86_64.tar.xzmv mysql-8.4.10-linux-glibc2.17-x86_64 /usr/local/mysql -
创建 mysql 用户
useradd -U -M -s /sbin/nologin mysql -
创建数据、日志目录并授予权限
mkdir -p /data/mysql/ /data/logs/mysqlchown -R mysql:mysql /usr/local/mysql/ /data/mysql/ /data/logs/mysql/ -
创建
/etc/my.cnf配置文件cat > /etc/my.cnf <<'EOF'[mysqld]user = mysqlbasedir = /usr/local/mysqldatadir = /data/mysqlsocket = /usr/local/mysql/mysqld.sockpid-file = /usr/local/mysql/mysqld.pidlog-error = /data/logs/mysql/mysqld.logserver-id = 1bind-address = 0.0.0.0port = 3306skip-name-resolve = ONmax_connections = 5000character_set_server = utf8mb4collation_server = utf8mb4_0900_ai_cidefault_storage_engine = InnoDBinnodb_buffer_pool_size = 2Ginnodb_flush_log_at_trx_commit = 1slow_query_log = ONslow_query_log_file = /data/logs/mysql/mysql-slow.loglong_query_time = 1log_bin = /data/mysql/mysql-binsync_binlog = 1binlog_expire_logs_seconds = 2592000[client]port = 3306socket = /usr/local/mysql/mysqld.sockdefault-character-set = utf8mb4[mysql]default-character-set = utf8mb4EOF -
配置 systemd 管理文件
cat > /etc/systemd/system/mysql.service <<'EOF'[Unit]Description=MySQL Database ServerDocumentation=man:mysqld(8) http://dev.mysql.com/doc/After=network.targetWants=network-online.targetAfter=network-online.target[Service]Environment=MYSQLD_PARENT_PID=1User=mysqlGroup=mysqlType=forkingPIDFile=/usr/local/mysql/mysqld.pidExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --daemonizeExecStop=/bin/kill -s SIGTERM $MAINPIDLimitNOFILE=102400LimitMEMLOCK=infinityRestart=on-failureOOMScoreAdjust=-500TimeoutSec=0[Install]WantedBy=multi-user.targetEOF -
初始化
/usr/local/mysql/bin/mysqld --initialize --datadir=/data/mysql/ --user=mysql --log-error=/data/logs/mysql/mysqld.log -
启动 mysql 并加入开机自启动
systemctl daemon-reloadsystemctl enable mysqlsystemctl start mysql -
修改 mysql 密码
/usr/local/mysql/bin/mysql -h127.0.0.1 -uroot -p$(grep 'temporary password' /data/logs/mysql/mysqld.log | awk '{print $NF}')ALTER USER USER() IDENTIFIED BY '123456';update mysql.user set host='%' where user='root';grant all privileges on *.* to 'root'@'%' with grant option;- 命令中修改的 root 用户密码为
123456,实际部署必须修改为强口令 - 若密码中包含特殊字符,仅允许
-或_,禁止使用@ ! # &等字符,以避免兼容性问题
- 命令中修改的 root 用户密码为
-
使用新设置的密码,通过以下命令测试数据库连接是否成功
/usr/local/mysql/bin/mysql -h127.0.0.1 -uroot -p123456
MySQL Slave
-
下载 mysql 安装包
- 服务器支持访问互联网
- 服务器不支持访问互联网
wget https://pdpublic.mingdao.com/private-deployment/offline/common/mysql-8.4.10-linux-glibc2.17-x86_64.tar.xz# mysql 安装包文件下载链接,下载完成后上传到部署服务器https://pdpublic.mingdao.com/private-deployment/offline/common/mysql-8.4.10-linux-glibc2.17-x86_64.tar.xz -
解压至安装目录
tar -xvf mysql-8.4.10-linux-glibc2.17-x86_64.tar.xzmv mysql-8.4.10-linux-glibc2.17-x86_64 /usr/local/mysql -
创建 mysql 用户
useradd -U -M -s /sbin/nologin mysql -
创建数据、日志目录并授予权限
mkdir -p /data/mysql/ /data/logs/mysqlchown -R mysql:mysql /usr/local/mysql/ /data/mysql/ /data/logs/mysql/ -
创建
/etc/my.cnf配置文件主从节点的
server-id必须唯一,本从库使用server-id = 2。cat > /etc/my.cnf <<'EOF'[mysqld]user = mysqlbasedir = /usr/local/mysqldatadir = /data/mysqlsocket = /usr/local/mysql/mysqld.sockpid-file = /usr/local/mysql/mysqld.pidlog-error = /data/logs/mysql/mysqld.logserver-id = 2bind-address = 0.0.0.0port = 3306skip-name-resolve = ONmax_connections = 5000character_set_server = utf8mb4collation_server = utf8mb4_0900_ai_cidefault_storage_engine = InnoDBinnodb_buffer_pool_size = 2Ginnodb_flush_log_at_trx_commit = 1slow_query_log = ONslow_query_log_file = /data/logs/mysql/mysql-slow.loglong_query_time = 1log_bin = /data/mysql/mysql-binsync_binlog = 1binlog_expire_logs_seconds = 2592000[client]port = 3306socket = /usr/local/mysql/mysqld.sockdefault-character-set = utf8mb4[mysql]default-character-set = utf8mb4EOF -
配置 systemd 管理文件
cat > /etc/systemd/system/mysql.service <<'EOF'[Unit]Description=MySQL Database ServerDocumentation=man:mysqld(8) http://dev.mysql.com/doc/After=network.targetWants=network-online.targetAfter=network-online.target[Service]Environment=MYSQLD_PARENT_PID=1User=mysqlGroup=mysqlType=forkingPIDFile=/usr/local/mysql/mysqld.pidExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --daemonizeExecStop=/bin/kill -s SIGTERM $MAINPIDLimitNOFILE=102400LimitMEMLOCK=infinityRestart=on-failureOOMScoreAdjust=-500TimeoutSec=0[Install]WantedBy=multi-user.targetEOF -
初始化
/usr/local/mysql/bin/mysqld --initialize --datadir=/data/mysql/ --user=mysql --log-error=/data/logs/mysql/mysqld.log -
启动 mysql 并加入开机自启动
systemctl daemon-reloadsystemctl enable mysqlsystemctl start mysql -
修改 mysql 密码
/usr/local/mysql/bin/mysql -h127.0.0.1 -uroot -p$(grep 'temporary password' /data/logs/mysql/mysqld.log | awk '{print $NF}')ALTER USER USER() IDENTIFIED BY '123456';update mysql.user set host='%' where user='root';grant all privileges on *.* to 'root'@'%' with grant option;- 命令中修改的 root 用户密码为
123456,实际部署必须修改为强口令 - 若密码中包含特殊字符,仅允许
-或_,禁止使用@ ! # &等字符,以避免兼容性问题
- 命令中修改的 root 用户密码为
-
使用新设置的密码,通过以下命令测试数据库连接是否成功
/usr/local/mysql/bin/mysql -h127.0.0.1 -uroot -p123456
配置主从
-
登录 master 节点,配置主从同步用户
/usr/local/mysql/bin/mysql --socket=/usr/local/mysql/mysqld.sock -uroot -p123456# 创建replcreate user 'repl'@'%' identified by '123456';grant replication slave on *.* to 'repl'@"%";show binary log status\G- 命令中新建的主从同步用户为
repl,密码为123456,实际部署必须修改为强口令 - 若密码中包含特殊字符,仅允许
-或_,禁止使用@ ! # &等字符,以避免兼容性问题
- 命令中新建的主从同步用户为
-
登录 slave 节点,配置启用主从
/usr/local/mysql/bin/mysql --socket=/usr/local/mysql/mysqld.sock -uroot -p123456change replication source tosource_host='192.168.10.2',source_port=3306,source_user='repl',source_password='123456',source_log_file='mysql-bin.000001',source_log_pos=2936,get_source_public_key=1;start replica;change replication source to语句中source_host的地址注意替换为部署时实际的 source 服务器 IPsource_log_file、source_log_pos的值为在 source 节点执行show binary log status\G看到的输出,如有不同请以实际部署时为准
-
检查主从同步状态
show replica status\G# 输出结果中 Replica_IO_Running 与 Replica_SQL_Running 均为 Yes 代表主从同步正常