首页 > 编程知识 正文

mysql主从分离主数据库配置,MySQL主从数据库

时间:2023-12-29 20:32:12 阅读:331373 作者:RDKH

本文目录一览:

mysql主从分离是怎么配置的

1、在主从服务器上都装上MySQL数据库,windows系统鄙人安装的是mysql_5.5.25.msi版本,Ubuntu安装的是mysql-5.6.22-linux-glibc2.5-i686.tar

windows安装mysql就不谈了,一般地球人都应该会。鄙人稍微说一下Ubuntu的MySQL安装,我建议不要在线下载安装,还是离线安装的好。大家可以参考 这位不知道大哥还是姐妹,写的挺好按照这个就能装上。在安装的时候可能会出现几种现象,大家可以参考解决一下:

(1)如果您不是使用root用户登录,建议 su - root 切换到Root用户安装,那就不用老是 sudo 了。

(2)存放解压的mysql 文件夹,文件夹名字最好改成mysql

(3)在./support-files/mysql.server start 启动MySQL的时候,可能会出现一个警告,中文意思是启动服务运行读文件时,忽略了my.cnf文件,那是因为my.cnf的文件权限有问题,mysql会认为该文件有危险不会执行。但是mysql还会启动成功,但如果下面配置从服务器参数修改my.cnf文件的时候,你会发现文件改过了,但是重启服务时,修改过后的配置没有执行,而且您 list一下mysql的文件夹下会发现很多.my.cnf.swp等中间文件。这都是因为MySQL启动时没有读取my.cnf的原因。这时只要将my.cnf的文件权限改成my_new.cnf的权限一样就Ok,命令:chmod 644 my.cnf就Ok

(4)Ubuntu中修改文档内容没有Vim,最好把Vim 装上,apt-get install vim,不然估计会抓狂。

这时候我相信MySQL应该安装上去了。

2、配置Master主服务器

(1)在Master MySQL上创建一个用户‘repl’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步。

创建用于读取日志的数据库用户

(2)找到MySQL安装文件夹修改my.Ini文件。mysql中有好几种日志方式,这不是今天的重点。我们只要启动二进制日志log-bin就ok。

在[mysqld]下面增加下面几行代码

View Code

(3)查看日志

mysql SHOW MASTER STATUS;

+-------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-------------------+----------+--------------+------------------+

| master-bin.000001 | 1285 | | |

+-------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

重启MySQL服务

3、配置Slave从服务器(windows)

(1)找到MySQL安装文件夹修改my.ini文件,在[mysqld]下面增加下面几行代码

my.cnf 配置

重启MySQL服务

(2)连接Master

change master to master_host='192.168.0.104', //Master 服务器Ip

master_port=3306,

master_user='repl',

master_password='mysql',

master_log_file='master-bin.000001',//Master服务器产生的日志

master_log_pos=0;

(3)启动Slave

start slave;

4、Slave从服务器(Ubuntu)

(1)找到MySQL安装文件夹修改my.cnf文件,vim my.cnf

s

(2) ./support-files/myql.server restart 重启MySQL服务 , ./bin/mysql 进入MySQL命令窗口

(3)连接Master

change master to master_host='192.168.0.104', //Master 服务器Ip

master_port=3306,

master_user='repl',

master_password='mysql',

master_log_file='master-bin.000001',//Master服务器产生的日志

master_log_pos=0;

(4)启动Slave

start slave;

OK所有配置都完成了,这时候大家可以在Master Mysql 中进行测试了,因为我们监视的时Master mysql 所有操作日志,所以,你的任何改变主服务器数据库的操作,都会同步到从服务器上。创建个数据库,表试试吧。。。

mysql 怎么配置主从数据库

5.6mysql怎么进行主从配置

在主数据库中创建新数据库rep_test。

然后编辑主数据库的my.ini文件

在[mysqld]节点中增加如下内容:

server-id=1 #指定唯一的ID,1至32,必须的

log-bin=mysql-log-bin #指定二进制日志存放路径,必须的

binlog-do-db=rep_test #指定要同步的数据库,必须的

#binlog-ignore-db=mysql #指定不要同步的数据库,如果指定了binlog-do-db就不用再指定该项

MySQL 主从,5 分钟带你掌握

MySQL 主从一直是面试常客,里面的知识点虽然基础,但是能回答全的同学不多。

比如楼哥之前面试小米,就被问到过主从复制的原理,以及主从延迟的解决方案,因为回答的非常不错,给面试官留下非常好的印象。你之前面试,有遇到过哪些 MySQL 主从的问题呢?

所谓 MySQL 主从,就是建立两个完全一样的数据库,一个是主库,一个是从库, 主库对外提供读写的操作,从库对外提供读的操作 ,下面是一主一从模式:

对于数据库单机部署,在 4 核 8G 的机器上运行 MySQL 5.7 时,大概可以支撑 500 的 TPS 和 10000 的 QPS, 当遇到一些活动时,查询流量骤然,就需要进行主从分离。

大部分系统的访问模型是读多写少,读写请求量的差距可能达到几个数量级,所以我们可以通过一主多从的方式, 主库只负责写入和部分核心逻辑的查询,多个从库只负责查询,提升查询性能,降低主库压力。

MySQL 主从还能做到服务高可用,当主库宕机时,从库可以切成主库,保证服务的高可用,然后主库也可以做数据的容灾备份。

整体场景总结如下:

MySQL 的主从复制是依赖于 binlog 的,也就是记录 MySQL 上的所有变化并以二进制形式保存在磁盘上二进制日志文件。

主从复制就是将 binlog 中的数据从主库传输到从库上,一般这个过程是异步的,即主库上的操作不会等待 binlog 同步的完成。

详细流程如下:

当主库和从库数据同步时,突然中断怎么办?因为主库与从库之间维持了一个长链接,主库内部有一个线程,专门服务于从库的这个长链接的。

对于下面的情况,假如主库执行如下 SQL,其中 a 和 create_time 都是索引:

我们知道,数据选择了 a 索引和选择 create_time 索引,最后 limit 1 出来的数据一般是不一样的。

所以就会存在这种情况:在 binlog = statement 格式时,主库在执行这条 SQL 时,使用的是索引 a,而从库在执行这条 SQL 时,使用了索引 create_time,最后主从数据不一致了。

那么我们改如何解决呢?

可以把 binlog 格式修改为 row,row 格式的 binlog 日志记录的不是 SQL 原文,而是两个 event:Table_map 和 Delete_rows。

Table_map event 说明要操作的表,Delete_rows event用于定义要删除的行为,记录删除的具体行数。 row 格式的 binlog 记录的就是要删除的主键 ID 信息,因此不会出现主从不一致的问题。

但是如果 SQL 删除 10 万行数据,使用 row 格式就会很占空间的,10 万条数据都在 binlog 里面,写 binlog 的时候也很耗 IO。但是 statement 格式的 binlog 可能会导致数据不一致。

设计 MySQL 的大叔想了一个折中的方案,mixed 格式的 binlog,其实就是 row 和 statement 格式混合使用, 当 MySQL 判断可能数据不一致时,就用 row 格式,否则使用就用 statement 格式。

有时候我们遇到从数据库中获取不到信息的诡异问题时,会纠结于代码中是否有一些逻辑会把之前写入的内容删除,但是你又会发现,过了一段时间再去查询时又可以读到数据了,这基本上就是主从延迟在作怪。

主从延迟,其实就是“从库回放” 完成的时间,与 “主库写 binlog” 完成时间的差值, 会导致从库查询的数据,和主库的不一致 。

谈到 MySQL 数据库主从同步延迟原理,得从 MySQL 的主从复制原理说起:

总结一下主从延迟的主要原因 :主从延迟主要是出现在 “relay log 回放” 这一步,当主库的 TPS 并发较高,产生的 DDL 数量超过从库一个 SQL 线程所能承受的范围,那么延时就产生了,当然还有就是可能与从库的大型 query 语句产生了锁等待。

我们一般会把从库落后的时间作为一个重点的数据库指标做监控和报警,正常的时间是在毫秒级别,一旦落后的时间达到了秒级别就需要告警了。

解决该问题的方法,除了缩短主从延迟的时间,还有一些其它的方法,基本原理都是尽量不查询从库。

具体解决方案如下:

在实际应用场景中,对于一些非常核心的场景,比如库存,支付订单等,需要直接查询从库,其它非核心场景,就不要去查主库了。

两台机器 A 和 B,A 为主库,负责读写,B 为从库,负责读数据。

如果 A 库发生故障,B 库成为主库负责读写,修复故障后,A 成为从库,主库 B 同步数据到从库 A。

一台主库多台从库,A 为主库,负责读写,B、C、D为从库,负责读数据。

如果 A 库发生故障,B 库成为主库负责读写,C、D负责读,修复故障后,A 也成为从库,主库 B 同步数据到从库 A。

Ubuntu配置Mysql主从数据库

本次环境:虚拟机下

服务器:Ubuntu

14.04

LTS

数据库:

5.5.37

端口:3306

主IP:192.168.63.133

从IP:192.168.63.134

授权账号:

user:suxh

password:111111

好了交代完环境:我们直接配置:

第一步:主从两台服务器要有同样的数据库(需要同步的)这里用的是backup

数据库(不多说了,在同步开始前,把主库的复制一份到从库就行了)

第二步配置主(master)数据库

编辑/etc/my.cnf

主要是开启二进制日志

和设置要同步的数据库

等一些参数

#

binary

logging

format

-

mixed

recommended

binlog_format=mixed

binlog-ignore-db=mysql

binlog-do-db=backup

#

required

unique

id

between

1

and

2^32

-

1

#

defaults

to

1

if

master-host

is

not

set

#

but

will

not

function

as

a

master

if

omitted

server-id

=

1

参数解释下:

server-id

这个是唯一的不能跟从服务器相同。

binlog_format

二进制文件的格式

binlog_ignore-db

忽略的数据库

binlog-do-db

要同步的数据库

设置完了以后

重启数据库就可以了。

第三步从数据库:

同样修改/etc/my.cnf

在mysql

版本5.1.7

不支持master-host”类似的参数;

所以这里只要配置server-id=2

就可以了

然后登陆从数据库设置

change

master

to

master_host='192.168.63.133',

master_user='suxh',

master_password='111111';

slave

start;

基本配置就好了。这是我的简要笔记。

mysql 主从配置 需要什么网络环境

 1、确保主数据库与从数据库一模一样。

例如:主数据库里的a的数据库里有b,c,d表,那从数据库里的就应该有一个模子刻出来的a的数据库和b,c,d表

2、在主数据库上创建同步账号。

GRANT REPLICATION SLAVE,FILE ON *.* TO 'mstest'@'192.168.1.112' IDENTIFIED BY '123456';

192.168.1.112:是运行使用该用户的ip地址

mstest:是新创建的用户名

123456:是新创建的用户名的密码

以上命令的详细解释,最好百度一下,写太多反到更加更不清思路。

3、配置主数据库的my.ini(因为是在window下,所以是my.ini不是my.cnf)。

  [mysqld]

server-id=1

log-bin=log

binlog-do-db=mstest //要同步的mstest数据库,要同步多个数据库,就多加几个replicate-db-db=数据库名

binlog-ignore-db=mysql //要忽略的数据库

mysql主从原理如何配置

1.在主数据库服务器为从服务器添加一个拥有权限访问主库的用户:

GRANT REPLICATION SLAVE ON *.* TO ' test'@'%' IDENTIFIED BY 'test';

(%表示允许所有IP,可设置指定从服务器IP)

添加用户后:

可在从服务器上用mysql -h127.0.0.1 -utest -ptest; 来测试是否有权限访问主数据库

2.在主据库配置文件加上:

#master config

server-id = 1

log-bin = mysql-bin

3.在从服务器数据库配置文件:

server-id = 2

master-host = 10.0.0.199

master-user = test

master-password = test

replicate-do-db = test

master-port = 3306

log-bin = mysql-bin

如果你的一切配置顺利

你在从服务器上输入命令:show slave statusG

成功情况:

Slave_IO_Running:yes

Slave_SQL_Running:yes

在主服务器上输入show master status

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。