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

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

相关推荐
lsc_blog9 小时前
年终自评别贴提交记录,把技术产出讲成变化
数据库·面试·职场和发展·跳槽·求职招聘
FungLeo12 小时前
成为全栈·基础补充·数据库迁移与事务:数据结构怎样安全演进
mysql·postgresql·sqlite·数据一致性·数据库事务·数据库迁移·成为全栈
Zan17 小时前
SQLite + SQLx 实战:为什么已经发布的数据库迁移文件,绝对不能再修改?
数据库·后端·面试
这个DBA有点耶17 小时前
数据同步的三个工程底线:DDL同步、断点续传、一致性校验——开源CDC的边界与KFS的路径
数据库·dba·代码规范
aiks_yuan18 小时前
MySQL GROUP BY 很慢怎么优化:加了索引反而从 1 秒变 7 秒,Using temporary 该不该消(MySQL 8.2 实测 400 万行)
mysql
SelectDB18 小时前
列式存储为什么适合分析类负载?原理、限制与日志场景应用
数据库
数据库小学妹19 小时前
MySQL大字段治理:行溢出机制、覆盖索引与拆表
数据库·mysql·性能优化
爱吃奥利奥_wen20 小时前
SQL Server 基础语法详解:从建库建表到约束与增删改查
服务器·数据库·oracle
这个DBA有点耶20 小时前
MySQL 8.0不可见索引:删索引怕出事,不删又拖慢写入——中间态怎么用?
数据库·mysql·代码规范