IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> mysql主从复制 -> 正文阅读

[大数据]mysql主从复制

目录

主从复制的过程:

MySQL支持的复制类型:

主从复制解决的问题

主从复制工作原理

如何实现主从复制?

配置数据库服务

?1)准备环境

?2)配置主从同步

1.配置主服务器? ?

(1)启用binlog参数? ? (2) 重启服务? ? (3)用户授权? ? (4)查看binlog日志

2.配置从服务器? ?

(1)指定server_id值并关闭binog参数? ? (2)重启服务? ? (3)指定主服务器信息? ? (4)启动slave程序? ? (5)查看状态信息

3.测试主从配置? ?

(1) 在主服务器建库projectdb,表user,授权用户admin? ? (2)在从服务器查看数据


mysql的主从架构适用于:初创型企业。

特点:

1、成本低,布署快速、方便
2、读写分离
3、还能通过及时增加从库来减少读库压力
4、主库单点故障
5、数据一致性问题(同步延迟造成)

主从复制的过程:

通过将MySQL的某一台主机(master)的数据复制到其他主机(slaves)上,并重新执行一遍来执行复制过程中一台服务器充当主服务器,而其他一个或多个其他服务器充当从服务器。

MySQL支持的复制类型:

(1)基于语句(statement)的复制
在主服务器上执行SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。
?
(2)基于行(row)的复制
把改变的内容复制过去,而不是把命令在从服务器上执行一遍。从MySQL 5.0开始支持。
?
(3)混合型(mixed)的复制
默认采用基于语句的复制,一旦发现基于语句的无法精确复制时,就会采用基于行的复制。

主从复制解决的问题

(1)解决灾备

(2)数据分布

(3)负载平衡

(4)读写分离

(5)提高并发能力

主从复制工作原理

主要基于MySQL二进制日志

主要包括三个线程(2个I/O线程,1个SQL线程)

1、MySQL将数据变化记录到二进制日志中; 
2、Slave将MySQL的二进制日志拷贝到Slave的中继日志中; 3、Slave将中继日志中的事件在做一次,将数据变化,反应到自身(Slave)的数据库 
?
详细步骤: 
1、从库通过手工执行change master to 语句连接主库,提供了连接的用户一切条件(user 、 password、port、ip),并且让从库知道,二进制日志的起点位置(file名 position 号); start slave
2、从库的IO线程和主库的dump线程建立连接。
3、从库根据change master to 语句提供的file名和position号,IO线程向主库发起binlog的请求。
4、主库dump线程根据从库的请求,将本地binlog以events的方式发给从库IO线程。 
5、从库IO线程接收binlog events,并存放到本地relay-log中,传送过来的信息,会记录到 master.info中 
6、从库SQL线程应用relay-log,并且把应用过的记录到relay-log.info中,默认情况下,已经应用过的 relay 会自动被清理purge

如何实现主从复制?

在主服务器(master)上 :
 ? ? ? ? ? ? ? 启用二进制日志 
 ? ? ? ? ? ? ? 选择一个唯一的server-id 
 ? ? ? ? ? ? ? 创建具有复制权限的用户 
在从服务器(slave)上 :
 ? ? ? ? ? ? ? 启用中继日志 
 ? ? ? ? ? ? ? (二进制日志可开启,也可不开启) 
 ? ? ? ? ? ? ? 选择一个唯一的server-id
 ? ? ? ? ? ? ? 连接至主服务器,并开始复制

配置数据库服务

有两台MySQL数据库服 务器Master和slave,Master为主服务器,slave为从服务器,初始状态时,Master和slave中的数据信息相同,当Master 中的数据发生变化时,slave也跟着发生相应的变化,使得master和slave的数据信息同步,达到备份的目的。

? ? ? ?负责在主、从服务器传输各种修改动作的媒介是主服务器的二进制变更日志,这个日志记载着需要传输给从服务器的各种修改动作。因此,主服务器必须激活二进制日志功能从服务器连接主服务器并请求主服务器把二进制变更日志传输给它的权限。

?1)准备环境


1.安装mysql软件步骤:(两台主从数据库服务器相同操作)
? ? (1)下载软件
? ? (2)解压缩
? ? (3)安装依赖软件
? ? (4)安装MySQL服务软件

[root@mysql11 ~]# wget http://repo.mysql.com/mysql57-community-release-el7-9.noarch.rpm
[root@mysql11 ~]# rpm -ivh mysql57-community-release-el7-9.noarch.rpm
[root@mysql11 ~]# yum install mysql mysql-server

2.挂载LV分区(两台主从数据库服务器相同操作)

[root@mysql11 ~]# vim /etc/fstab?
/dev/vg0/lv0 ? ? ? ? ? /var/lib/mysql ? ? ? ? ? xfs ? ? defaults ? ? ? ?0 0
[root@mysql11 ~]# mount -a
[root@mysql11 ~]# mount |grep /var/lib/mysql
/dev/mapper/vg0-lv0 on /var/lib/mysql type xfs (rw,relatime,attr2,inode64,noquota)

3.启动服务并查看(两台数据库服务器相同操作)

[root@mysql11 ~]# systemctl enable --now mysqld
[root@mysql11 ~]# netstat -utnlp|grep :3306
tcp6 ? ? ? 0 ? ? ?0 :::3306 ? ? ? ? ? ? ? ? :::* ? ? ? ? ? ? ? ? ? ?LISTEN ? ? ?2519/mysqld?

4.管理员登录(两台主从数据库服务器相同操作)
? ? (1)查看初始密码
? ? (2)初始密码登录
? ? (3)修改登录密码
? ? (4)断开连接
? ? (5)新密码登录

[root@mysql11 ~]# grep "temporary password" /var/log/mysqld.log
2020-07-25T07:50:56.663846Z 1 [Note] A temporary password is generated for root@localhost: K2sj!YGpbizD
[root@mysql11 ~]# mysql -uroot -p'K2sj!YGpbizD'
mysql> alter user root@"localhost" identified by "123qqq...A";
mysql> exit
Bye
[root@mysql11 ~]# mysql -uroot -p123qqq...A

2)配置主从同步


1.配置主服务器
? ? (1)启用binlog参数
? ? (2) 重启服务
? ? (3)用户授权
? ? (4)查看binlog日志

[root@mysql11 ~]# vim /etc/my.cnf? //启用binlog参数
log_bin=master11
?server_id=11
[root@mysql11 ~]# systemctl restart mysqld? ?//重启服务
[root@mysql11 ~]# mysql -uroot -p123qqq...A
mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A"; ? ? //?用户授权
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show master status; ? // 查看主库状态
+-----------------+----------+--------------+------------------+-------------------+
| File ? ? ? ? ? ?| Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master11.000001 | ? ? ?441 | ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
[root@mysql22 ~]# systemctl restart mysqld

2.配置从服务器
? ? (1)指定server_id值并关闭binog参数
? ? (2)重启服务
? ? (3)指定主服务器信息
? ? (4)启动slave程序
? ? (5)查看状态信息

[root@mysql22 ~]# vim /etc/my.cnf
? ?[mysqld]
? server_id=22
[root@mysql22 ~]# systemctl restart mysqld
[root@mysql22 ~]# mysql -uroot -p123qqq...A
mysql> change master to ? ? ? ? ? ?// 设定主从同步
? ? -> master_host="192.168.4.11", ??
? ? -> master_user="repluser",
? ? -> master_password="123qqq...A",
? ? -> master_log_file="master11.000001",
? ? -> master_log_pos=441;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql> show slave status\G ? ? //检查状态
*************************** 1. row ***************************
? ? ? ? ? ? ? ?Slave_IO_State: Waiting for master to send event
? ? ? ? ? ? ? ? ? Master_Host: 192.168.4.11
? ? ? ? ? ? ? ? ? Master_User: repluser
? ? ? ? ? ? ? ? ? Master_Port: 3306
? ? ? ? ? ? ? ? Connect_Retry: 60
? ? ? ? ? ? ? Master_Log_File: master11.000001
? ? ? ? ? Read_Master_Log_Pos: 441
? ? ? ? ? ? ? ?Relay_Log_File: mysql22-relay-bin.000003
? ? ? ? ? ? ? ? Relay_Log_Pos: 319
? ? ? ? Relay_Master_Log_File: master11.000001
? ? ? ? ? ? ?Slave_IO_Running: Yes
? ? ? ? ? ? Slave_SQL_Running: Yes

3.测试主从配置
? ?(1) 在主服务器建库projectdb,表user,授权用户admin
? ? (2)在从服务器查看数据

[root@mysql11 ~]# mysql -uroot -p123qqq...A
mysql> grant select,insert on project.* to admin@"%" identified by "123qqq...A";
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> create database project;
Query OK, 1 row affected (0.00 sec)

mysql> create table project.user(id int);
Query OK, 0 rows affected (0.12 sec)

[root@web33 ~]# yum -y install mariadb
[root@web33 ~]# mysql -h192.168.4.11 -uadmin -p123qqq...A
MySQL [(none)]> insert into project.user values(11);
Query OK, 1 row affected (0.43 sec)
MySQL [(none)]> insert into project.user values(22);
Query OK, 1 row affected (0.00 sec)

[root@mysql22 ~]# mysql -uroot -p123qqq...A
mysql> select * from project.user;
+------+
| id ? |
+------+
| ? 11 |
| ? 22 |
+------+
2 rows in set (0.00 sec)

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:27:35  更:2022-03-16 22:28:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:21:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码