送 Doris 限量T恤,快来围观!>>>
mysql 主从复制原理
Mysql 的 binlog 日志重现的原理。binlog 会记录下所有修改了数据库的SQL 语句insert,update,delete,create,alter,drop table, grant 等等。
主从复制的原理其实就是把主服务器上的 bin 日志复制到从服务器上执行一遍,这样从服务器上的数据就和主服务器上的数据相同了。
复制流程图:
主从复制配置过程:
主节点:
1. 启用二进制日志。
2. 为当前节点设置一个全局唯一的server_id。
3. 创建有复制权限的用户账号 REPLIACTION SLAVE ,REPLIATION,CLIENT。
从节点:
1. 启动中继日志。
2. 为当前节点设置一个全局唯一的server_id。
3. 使用有复制权限的用户账号连接至主节点,并启动复制线程。
Mysql多实例搭建(Windows环境)
-
复制安装成功的mysql实例
修改my.ini文件
[client]
# 端口号
port=3307
[mysql]
# 编码格式
default-character-set=gbk
[mysqld]
# 端口号
port=3307
# 配置根目录
basedir="D:/ProgrammingTool/DataManagementTool/mysql-5.6.42-winx64 - 2/"
# 配置数据存储根目录
datadir="D:/ProgrammingTool/DataManagementTool/mysql-5.6.42-winx64 - 2/data/"
character-set-server=gbk
default-storage-engine=MyISAM
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 配置最大连接数
max_connections=512
依此类推配置第二个实例,第三个实例。
2. 安装mysql服务
以管理员身份运行cmd窗口,在mysql根目录bin文件下执行安装服务
mysqld install {服务名称} --defaults-file="{根目录下ini文件}"
eg: mysqld install MYSQL2 --defaults-
file="D:/ProgrammingTool/DataManagementTool/mysql-5.6.42-winx64 -2/my.default.ini"
3. 启动mysql服务
4. 测试连接
主从复制参数配置流程
1. 在主服务器上,必须开启二进制日志机制和配置一个独立的ID
2. 在每一个从服务器上,配置一个唯一的ID,创建一个用来专门复制主服务器数据的账号
3. 在开始复制进程前,在主服务器上记录二进制文件的位置信息
4. 如果在开始复制之前,数据库中已经有数据,就必须先创建一个数据快照(可以使用mysqldump导出数据库,或者直接复制数据文件)
5. 配置从服务器要连接的主服务器的IP地址和登陆授权,二进制日志文件名和位置
配置主库ini参数
# For advice on how to change settings please see
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[mysqld]
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
#=========主从复制关键配置=====================
#主库和从库需要不一致,配一个唯一的ID编号,1至32。手动设定
server_id=1
log_slave_updates=1
#二进制文件存放路径,存放在根目录data
log_bin=master-bin
# 设置同步数据库
binlog-do-db=office_dev
# 设置忽略数据库
binlog-ignore-db=boos
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
配置从库ini参数
[client]
# 端口号
port=3307
[mysql]
# 编码格式
default-character-set=gbk
[mysqld]
# 端口号
port=3307
# 配置根目录
basedir="D:/ProgrammingTool/DataManagementTool/mysql-5.6.42-winx64 - 2/"
basedir="D:/ProgrammingTool/DataManagementTool/mysql-5.6.42-winx64 - 2/"
# 配置数据存储根目录
datadir="D:/ProgrammingTool/DataManagementTool/mysql-5.6.42-winx64 - 2/data/"
character-set-server=gbk
default-storage-engine=MyISAM
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 配置最大连接数
max_connections=512
server_id=2
log-bin=mysql-bin
replicate-do-db=office_dev
主库执行语句创建拥有复制权限用户
GRANT REPLICATION SLAVE ON *.* TO '{用户名}'@'{主库ip地址}' identified by '{密
码}';
eg: GRANT REPLICATION SLAVE ON *.* TO 'slave'@'127.0.0.1' identified by
'123456';
FLUSH PRIVILEGES; # 刷新数据库
查看主库参数:
show master status;
设置从库连接到主库
1. STOP SLAVE; # 停止主从复制
2. change master to master_host='127.0.0.1', master_user='slave',
master_password='root96077',master_log_file='master-bin.000004',
master_log_pos=2657;
注:
master_host:主服务器Ubuntu的ip地址
master_log_file: 前面查询到的主服务器日志文件名
master_log_pos: 前面查询到的主服务器日志文件位置
3. START SLAVE; # 启动主从复制
4. 使用 SHOW SLAVE STATUS 查看连接参数