搭建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;

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

相关推荐
曹牧2 小时前
C#:空合并运算符
java·前端·数据库
小羊没烦恼!3 小时前
铁道部新客票系统设计(二)
开发语言·前端·数据库·python·oracle·c#·php
泡海椒4 小时前
JQuick-SQL JOIN 查询:连接注册数据集的正确方式
数据库·sql
xiaogai_gai5 小时前
钉钉月结报销到金蝶付款单同步方案实战教程
大数据·数据库·钉钉
Nturmoils5 小时前
报表总在扫大表,列存储应该放在哪一层
数据库
夜雪一千5 小时前
ShardingSphere 雪花 / UUIDv7 主键分片实战 + SQL 建表示例
数据库·sql
Elastic 中国社区官方博客6 小时前
Elasticsearch:安装自行管理的 Elastic Stack 集群
大数据·运维·服务器·数据库·elasticsearch·搜索引擎·全文检索
PingCAP6 小时前
Agent 从 Demo 到生产,到底卡在哪?
数据库·tidb·agent
SelectDB7 小时前
开源替代怎么选:能力对照、三条部署路径与四类边界速查
数据库·云原生·开源
SelectDB7 小时前
自建与托管怎么选:开源自建、私有化与云上托管三条路径速查
数据库·云原生·开源