搭建mysql主从数据库

一台机器做主数据库、另外一个机器做从数据库。

假设:

‌Master (主库)‌: 192.168.40.120

‌Slave (从库)‌: 192.168.40.121

主数据库和从数据库都安装

wget https://dev.mysql.com/get/mysql80-community-release-el7-9.noarch.rpm

sudo rpm -ivh mysql80-community-release-el7-9.noarch.rpm

sudo yum install mysql-server -y

mysqld --initialize

chown mysql:mysql -R /var/lib/mysql

sudo chmod 750 /var/lib/mysql #注意这个权限不能设置成777,否则会启动失败

chown mysql:mysql -R /var/log/mysql/

sudo chmod 750 /var/log/mysql/

systemctl start mysqld

systemctl enable mysqld

systemctl status mysqld

获取密码

grep 'temp' /var/log/mysql/mysqld.log

mysql -u root -p

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码123!';

CREATE USER 'root'@'%' IDENTIFIED BY '新密码123!';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

在主数据库修改:

vim /etc/my.cnf

在文件末尾追加:

--- 以下是新增/修改的配置 ---

mysqld

1. 解决日志权限报错:指定明确的日志路径

确保 /var/log/mysql 目录存在且归属为 mysql:mysql

log-error=/var/log/mysql/mysqld.log

2. 基础数据目录配置(根据实际安装情况确认,通常为默认值)

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

3. 字符集配置(避免中文乱码,游戏业务必备)

character-set-server=utf8mb4

collation-server=utf8mb4_unicode_ci

4. 主从复制核心配置(如果是主库,server-id 设为 1;从库设为 2 或其他唯一值)

server-id=1

log-bin=mysql-bin

binlog-format=ROW

5. 其他常用优化(可选)

max_connections=1000

innodb_buffer_pool_size=1G # 根据服务器内存大小调整,建议为物理内存的 50%-70%

校验配置文件是否修改正确执行:sudo mysqld --validate-config

重置失败启动次数

sudo systemctl reset-failed mysqld

重新启动

sudo systemctl restart mysqld

查看启动是否成功

sudo systemctl status mysqld

登录主库:

mysql -uroot -p新密码123!

-- 创建用于主从复制的用户

CREATE USER 'repl_user'@'%' IDENTIFIED BY 'ReplPass123!';

-- 授予复制权限

GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';

FLUSH PRIVILEGES;

-- 查看主库状态,记录 File 和 Position,后续从库配置需要用到

SHOW MASTER STATUS;

配置从库

vim /etc/my.cnf

文件追加:

mysqld

服务器唯一ID,必须与主库不同,从库通常设为2,3...

server-id = 2

开启中继日志

relay-log = relay-bin

字符集统一

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci

可选:如果从库只读,防止误写

read-only = 1

super-read-only = 1

重启:

sudo systemctl restart mysqld

登录从库 MySQL,执行以下 SQL(替换为主库的实际 IP、用户、密码及之前记录的 File/Position):

mysql -uroot -p新密码123!

登录后执行:

-- 停止奴隶线程

STOP SLAVE;

-- 配置主库信息

CHANGE MASTER TO

MASTER_HOST='192.168.40.120',//主数据的地址

MASTER_USER='repl_user',//主数据建立的登录账号

MASTER_PASSWORD='ReplPass123!',//主数据建立的登录账号的密码

MASTER_LOG_FILE='binlog.000001',//上面记录的File 文件名

MASTER_LOG_POS=1410;//上面记录的Position

-- 启动奴隶线程

START SLAVE;

验证同步状态:

SHOW SLAVE STATUS\G;

测试现在在主数据创建一个数据,从数据库也会出现一条数据

相关推荐
白帽黑客-晨哥1 小时前
Copilot 能换成本地吗?本地化 AI 编程助手完全指南
数据库·人工智能·copilot
l1t3 小时前
DeepSeek 4.1总结的Tom Lane 谈塑造 Postgres 三十年历程的架构决策
开发语言·数据库·postgresql·架构
星云API|微信接口开发4 小时前
企业微信二次开发实战笔记:如何用在线调试快速验证接口功能
数据库·笔记·企业微信
PHP实战开发录6 小时前
PHP事务异常后为什么数据还写进去了
mysql·php·开发
隔窗听雨眠10 小时前
记一次SQL Server数据库性能分析:从CPU100%到单配置修复的完整诊断
开发语言·数据库·php
samson_www10 小时前
Oracle数据泵拷贝表空间
数据库·dba
呆萌很11 小时前
MySQL 8.4 LTS 完整安装教程
数据库·mysql
天空'之城11 小时前
单片机基础核心知识点汇总(三十三)
数据库·单片机·嵌入式硬件
爱吃苹果的日记本13 小时前
数据结构第一课
c语言·数据结构·数据库·学习·c#