首先准备两个MySQL服务器,具体mysql安装教程之前文章有介绍.
推荐是用mysqld_multi
管理mysql服务器
[mysqld_multi]
mysqld=/usr/local/mysql/bin/mysqld_safe
[mysqld1]
# 基础配置
port=3306
user=root
basedir = /usr/local/mysql
datadir=/mysql/3306/data
pid-file = /mysql/3306/mysql.pid
socket=/mysql/3306/mysql.sock
log_error=/mysql/3306/error.log
# 服务器id,必须
server-id=1
# 开机二进制日志
log-bin=/mysql/3306/mysqlbin
# 可以忽略
binlog-ignore-db=mysql
# 需要复制的数据库,必须
binlog-do-db=test
# STATEMENT不能解决时间函数的问题
# ROW记录每一行的改变,效率低
# MIXED自动切换,如果存在函数就用ROW,否则使用STATEMENT
binlog_format=mixed
# 二进制缓存大小
binlog_cache_size=4M
启动master
mysqld_multi --defaults-file=/root/mysql/my_multi.cnf start 1
创建用于同步数据的账户
# 连接到master节点: mysql -uroot -p -S /mysql/3306/mysql.sock
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
查看master状态和复制起始点
show master status;
# File为复制的文件 Position为开始复制的接入点
+-----------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| mysqlbin.000001 | 682 | test | mysql | |
+-----------------+----------+--------------+------------------+-------------------+
[mysqld2]
port=3307
user=root
basedir = /usr/local/mysql
datadir=/mysql/3307/data
socket=/mysql/3307/mysql.sock
pid-file = /mysql/3307/mysql.pid
socket=/mysql/3307/mysql.sock
log_error=/mysql/3307/error.log
server-id=2
relay-log=mysql-relay
启动slave节点
mysqld_multi --defaults-file=/root/mysql/my_multi.cnf start 2
连接master
CHANGE MASTER TO MASTER_HOST='127.0.0.1',
MASTER_PORT=3307,
MASTER_USER='slave',
MASTER_PASSWORD='123456',
# 主节点当前logbin文件
MASTER_LOG_FILE='mysqlbin.000001',
# logbin文件的偏移值
MASTER_LOG_POS=682;
开始复制
start slave;
查看连接状态
show slave status \G;
# 下面两个同时为yes,表示成功
-----------------------------------
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
连接主机失败时,重试,也可以用以下命令提升slave为主节点
stop slave;
reset master;
只要开启了binlog功能的mysql服务器就支持同步数据,支持数据同步就支持做为主节点.
所以我们配置多个开启binlog的mysql服务器,然后设置互为主从模式就能实现多个主节点共存.
[mysqld_multi]
mysqld=/usr/local/mysql/bin/mysqld_safe
[mysqld1]
port=3306
user=root
basedir = /usr/local/mysql
datadir=/mysql/3306/data
pid-file = /mysql/3306/mysql.pid
socket=/mysql/3306/mysql.sock
log_error=/mysql/3306/error.log
server-id=1
# 自增列从2开始
auto_increment_offset = 1
# 每次递增的步长
auto_increment_increment = 2
log-slave-updates = true
relay-log=mysql-relay
log-bin=/mysql/3306/mysqlbin
binlog-ignore-db=mysql
binlog-do-db=test
binlog_format=mixed
binlog_cache_size=4M
[mysqld2]
port=3307
user=root
basedir = /usr/local/mysql
datadir=/mysql/3307/data
pid-file = /mysql/3307/mysql.pid
socket=/mysql/3307/mysql.sock
log_error=/mysql/3307/error.log
server-id=2
auto_increment_offset = 2
auto_increment_increment = 2
log-slave-updates = true
relay-log=mysql-relay
log-bin=/mysql/3307/mysqlbin
binlog-ignore-db=mysql
binlog-do-db=test
binlog_format=mixed
binlog_cache_size=4M
这里需要注意的是防止插入过快导致id重复报错,所以设置不同的起始id,步长设置为主节点数
[mysqld1]
auto_increment_offset = 1
auto_increment_increment = 2
relay-log=mysql-relay
log-slave-updates = true
[mysqld2]
auto_increment_offset = 2
auto_increment_increment = 2
relay-log=mysql-relay
log-slave-updates = true
相互连接
mysql:3306> CHANGE MASTER TO MASTER_HOST='127.0.0.1',
MASTER_PORT=3307,
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysqlbin.000001',
MASTER_LOG_POS=154;
mysql:3307> CHANGE MASTER TO MASTER_HOST='127.0.0.1',
MASTER_PORT=3306,
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysqlbin.000001',
MASTER_LOG_POS=154;
mysql:3306> start slave;
mysql:3307> start slave;
这就是配置多主的所有步骤.
多主多从虽然能增加mysql的连接数,但是数据会始终同步到一张表中,对插入速度并不会有任何提高,而且还会导致每次插入id都递增2而造成id不连续,浪费id空间。
GRANT Select ON . TO 'reader'@'%' IDENTIFIED BY "123456"; GRANT Select,Alter,Create,INDEX,Insert,Delete,Update ON . TO 'writer'@'%' IDENTIFIED BY "123456"; ```
使用不同的账号连接数据库就实现了读写分离。
通过配置文件(不推荐)
只有确认某个主机永远不会执行写操作时才使用配置文件设置为只读
[mysqld] read_only=1
1
2
通过sql命令(配合第一种方式使用)
该命令需要超级管理员才有权限执行,在自动切换主从时有用
set global read_only=1;
1
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有