暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

11-mysql高级篇-主从复制

潭时录 2022-11-17
160

点击蓝色“潭时录”关注我丫

每天和小潭一起快乐的学习~

    

    你好,我是在学mysql的小潭。在上一期10-mysql高级篇-锁机制介绍推文中我们认识了数据库中的锁。今天,我们将一起学习MySQL中主从复制相关的知识。


一、基本原理

    slave从机会从master主机读取binlog来进行数据同步。

复制过程主要分为以下三步:

  • master将改变记录到二进制日志(binary log),这个记录过程被称为二进制日志事件,binary log events.

  • slave将master的binary log events拷贝到它的中继日志(relay log)

  • slave重做中继日志中的事件,将改变应用到自己的数据库中,MySQL的复制是异步且串行化的


二、基本原则和存在的问题

  • 每个slave只有一个master

  • 每个slave只能有一个唯一的服务器ID

  • 每个master可以有多个slave

延时,是MySQL的复制中需要面临的最大问题。


三、常见配置

    我们此处仅以一主一从的形式为例,来具体学习其中的配置知识。

  • 要求:MySQL版本一致且后台以服务形式运行,主从都配置在[mysqld]节点下,都是小写

  • 配置项:

主机修改my.ini/my.cnf配置文件
[必须]主服务器唯一IDserver-id=1
[必须]启用二进制日志

log-bin=自己本地的路径/mysqlbin

以windows为例:

log-bin=X:/XX/MysqlXX/data/mysqlbin

[可选]启用错误日志

log-err=自己本地路径/mysqlerr

以windows为例:

log-err=X:/XX/MysqlXX/data/mysqlerr

[可选]根目录

basedir="自己本地路径"

以windows为例:

basedir="X:/XX/MysqlXX/"

[可选]临时目录

tmpdir="自己本地路径"

以windows为例:

tmpdir="X:/XX/MysqlXX/"

[可选]数据目录

datadir="自己本地路径/Data/"

以windows为例:

datadir="X:/XX/MysqlXX/Data/"

主机,读写皆可
read-only=0
[可选]设置不需要复制的数据库
binlog-ignore-db=mysql
[可选]设置需要复制的数据库,不配置该参数则表示全复制
binlog-do-db=主数据库名称


从机修改my.cnf配置文件
[必须]从服务器唯一ID
server-id=2
[可选]启用二进制日志
log-bin=mysql-bin


主从机关闭防火墙
windows手动关闭
控制面板 -> 系统和安全 -> Windows防火墙

linux防火墙

或开放端口(建议)

service iptables stop 或

firewall-cmd --permanent --add-port=3306/tcp


以windows为例,在主机上建立账户并授权slave

授权从机IP的xx以指定的密码登录到主机

并刷新

mysql> GRANT REPLICATION SLAVE ON *.* TO 'xx'@'从机数据库IP' IDENTIFIED BY '指定的密码xx';

mysql> flush privileges;

查询master状态

mysql> show master status;

记录下File和Position的值

执行完以上步骤后将不再操作主服务器MySQL,防止主服务器状态值变化


linux从机配置账户信息

配置从机相关参数

(不分库)

如果出现ERROR 1198(HY000): ...xxxx ; run STOP SLAVE first说明之前做过同步,需要先停止主从复制功能,但需要注意再次查询主机状态是否变化

mysql> CHANGE MASTER TO MASTER_HOST='主机IP', 

MASTER_USRE='指定的主机名xx', 

MASTER_PASSWORD='指定的密码', 

MASTER_LOG_FILE='File名称', 

MASTER_LOG_POS=Position值;

启动从服务器复制功能
mysql> start slave;
查询slave状态

mysql> show slave status\G; (以键值对方式显示,以下参数同为Yes表示配置成功)

     Slave_IO_Running: Yes

     Slave_SQL_Running: Yes

(此处若在配置从机参数后,查询slave状态仍遇到Last_IO_Error: error connecting to master 'xx@ip:3306' -retry-time:60 retries: 1的提示时,建议将master主机的mysql库的user表中user='root'对应的host值由localhost改为%,即允许所有ip访问):

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '数据库密码' WITH GRANT OPTION; 

UPDATE user set host='%' where user='root';


测试
主机建表建库

mysql> create database mydbt1;  -- 建库

use mydbt1;  -- 用库

create table test01(id int not null, name varchar(20));  -- 建表

insert into test01 values(1, 'test');  -- 插数

select * from test01;  -- 查询

从机效果检查

mysql> show database;

select * from test01;

主机

从机


停止主从复制
从机停掉即可
stop slave;


重置主从复制配置
停止从机stop slave;
重置主机
reset master;








下期预告:mysql高级篇知识总结




如果你喜欢本文,
请长按二维码,关注 潭时录.
转发至朋友圈,是对我最大的支持。

点个 在看 
喜欢是一种感觉
在看是一种支持
↘↘↘

文章转载自潭时录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论