MySQL从服务器写入报错吗_MySQL主从复制读写分离及奇怪的问题

一直都没有写blog的习惯,以前总觉得自己的脑子就是最好的记忆容器,现在觉得我好像有个假脑子。

当时是使用阿里云镜像,安装了两台ECS,结果配置MySQL的时候出现了UUID重复问题。

先从配置主从开始吧,值得记录。

文中很多部分引用了网络上的零碎资料!

场景

一般应用对数据库而言都是“读多写少”,也就说对数据库读取数据的压力比较大,有一个思路就是说采用数据库集群的方案,

基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中 的从数据库。 当然,主服务器也可以提供查询服务。使用读写分离最大的作用无非是环境服务器压力

读写分离的好处(资料):

1.MySQL复制另外一大功能是增加冗余,提高可用性,当一台数据库服务器宕机后能通过调整另外一台从库来以最快的速度恢复服务,因此不能光看性能,也就是说1主1从也是可以的。

2.多机器(集群)的处理能力

3.对于读操作为主的应用,使用读写分离是最好的场景,因为可以确保写的服务器压力更小,而读又可以接受点时间上的延迟。

4.主从只负责各自的写和读,极大程度的缓解X锁和S锁争用

5.从库可配置myisam引擎,提升查询性能以及节约系统开销

6.从库同步主库的数据和主库直接写还是有区别的,通过主库发送来的binlog恢复数据,但是,最重要区别在于主库向从库发送binlog是异步的,从库恢复数据也是异步的

7.读写分离适用与读远大于写的场景,如果只有一台服务器,当select很多时,update和delete会被这些select访问中的数据堵塞,等待select结束,并发性能不高。 对于写和读比例相近的应用,应该部署双主相互复制

8.可以在从库启动是增加一些参数来提高其读的性能,例如--skip-innodb、--skip-bdb、--low-priority-updates以及--delay-key-write=ALL。当然这些设置也是需要根据具体业务需求来定得,不一定能用上

9.分摊读取。假如我们有1主3从,不考虑上述1中提到的从库单方面设置,假设现在1 分钟内有10条写入,150条读取。那么,1主3从相当于共计40条写入,而读取总数没变,因此平均下来每台服务器承担了10条写入和50条读取(主库不 承担读取操作)。因此,虽然写入没变,但是读取大大分摊了,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了,说白 了就是拿机器和带宽换性能。MySQL官方文档中有相关演算公式:官方文档 见6.9FAQ之“MySQL复制能够何时和多大程度提高系统性能”

28abd66646d92665a5d9efd34ee5a66b.png

###原理

MySQL主(称master)从(称slave)复制的原理:

master将数据改变记录到二进制日志(binary log)中,也即是配置文件log-bin指定的文件(这些记录叫做二进制日志事件,binary log events)

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

slave重做中继日志中的事件,将改变反映它自己的数据(数据重演)

###注意

主DB server和从DB server数据库的版本一致

主DB server和从DB server数据库数据一致,这里就会可以把主的备份在从上还原,也可以直接将主的数据目录拷贝到从的相应数据目录

主DB server开启二进制日志,主DB server和从DB server的server_id及auto.cnf中的UUID都必须唯一

###操作

1、主从服务器分别作以下操作:

1.1、版本一致

1.2、初始化表,并在后台启动mysql

1.3、修改root的密码

2、修改主服务器Master的MySQL配置文件

$ vi /etc/my.cnf(默认)

[mysqld]

log-bin=mysql-bin //[必须]启用二进制日志

server-id=93 //[必须]服务器唯一ID,默认是1,一般取IP最后一段

# 指定同步的数据库, 如果 不指定则同步全部数据库

binlog-do-db= testdb

3、修改从服务器slave

$ vi /etc/my.cnf

[mysqld]

server-id=211 //[必须]服务器唯一ID,默认是1,一般取IP最后一段

4、重启两台服务器的MySQL

$ /etc/init.d/mysql restart

$ service mysqld restart

5、在主服务器上建立帐户并授权slave:

$ /usr/local/mysql/bin/mysql -uroot -p 或直接 mysql -u root -p

mysql>GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by '123456';

mysql>flush privileges;

//一般不用root帐号,%表示所有客户端都可能连,只要帐号、密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。

6、登录主服务器的MySQL,查询Master的状态

mysql>show master status\G;

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

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000004 | 308 | | |

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

1 row in set (0.00 sec)

注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

7、配置从服务器Slave:

mysql>change master to master_host='192.168.145.222',master_user='slave',master_password='123456',

master_log_file='mysql-bin.000004',master_log_pos=308;

//注意不要断开,308数字前后无单引号。

Mysql>start slave; //启动从服务器复制功能

8、检查从服务器(Slave)复制功能状态:

mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.2.222 //主服务器地址

Master_User: slave //授权帐户名,尽量避免使用root

Master_Port: 3306 //数据库端口,部分版本没有此行

Connect_Retry: 60

Master_Log_File: mysql-bin.000004

Read_Master_Log_Pos: 600 //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos

Relay_Log_File: ddte-relay-bin.000003

Relay_Log_Pos: 251

Relay_Master_Log_File: mysql-bin.000004

Slave_IO_Running: Yes //此状态必须YES

Slave_SQL_Running: Yes //此状态必须YES

......

注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

以上操作过程,主从服务器配置完成。

10、监控:

据说可以编写一shell脚本,用nagios监控slave的两个yes(Slave_IO及Slave_SQL进程),如发现只有一个或零个yes,就表明主从有问题了。

###问题

配置mysql主从时,由于是阿里云镜像系统盘拷贝的MySQL目录,导致主从MySQL UUID相同, Slave_IO无法启动,报错信息如下:

The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

解决办法:

mysql>show variables like '%log_error%';//查看配置的日志地址,查看日志

修改MySQL data 目录下auto.cnf 文件中uuid的值,使两台MySQL不同即可,

$ find / -name auto.cnf 或 find / -name "auto.cnf"

修改后重启MySQL服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python二分法查找程序_查找Python程序的输出| 套装2(基础)

python二分法查找程序Program 1: 程序1: a 10b 3res a/b print "a/b: ", res res float(a/b)print "float (a/b) : ", res res float (a) /float (b)print "float (a/b) : ", res res a/b print "a/b: ", resOutput…

数据库 数据库SQL语句一

字符和日期 --字符和日期都要包含在单引号中 --字符大小写敏感&#xff0c;日期格式敏感 --默认的日期格式是DD-MON-RR--查询当前系统时间 SQL> select sysdate from dual; --查询工资在1000~2000之间的员工信息 SQL> select * from emp where sal>1000 and sal<20…

mysql text保存图片_用mysql 如果包含有文字和图片,那么我要用哪种数据类型存储呢?还是分开,用TEXT和BLOB吗?...

rootytt:/var/lib/mysql-files# for i in seq 1 100; do cp 微信图片_20190711095019.jpg "$i".jpg;done;rootytt:/var/lib/mysql-files# ls100.jpg 17.jpg 25.jpg 33.jpg 41.jpg 4.jpg 58.jpg 66.jpg 74.jpg 82.jpg 90.jpg 99.jpg f8.tsv10.jpg 18…

flask mysql 版本_flask 数据库字段类型

使用flask_sqlalchemy首先引用一下廖雪峰Python教程里关于sqlalchemy的话&#xff0c;这里我们要讲的是flask_sqlalchemy的用法。1. 安装用pip安装即可&#xff0c; 进入cmd控制台输入pip install Flask-SQLAlchemy2. 引用引用方法有2种&#xff0c;旧的和新的。from f...文章邻…

Kafka的配置文件详细描述

在kafka/config/目录下面有3个配置文件&#xff1a; producer.propertiesconsumer.propertiesserver.properties (1).producer.properties:生产端的配置文件 #指定kafka节点列表&#xff0c;用于获取metadata&#xff0c;不必全部指定 #需要kafka的服务器地址&#xff0c;来获取…

Java StreamTokenizer nextToken()方法与示例

StreamTokenizer类nextToken()方法 (StreamTokenizer Class nextToken() method) nextToken() method is available in java.io package. nextToken()方法在java.io包中可用。 nextToken() method is used to parse the next token from the input stream of this StreamTokeni…

二维数组m的元素是4个字符组成的串_串、数组和广义表

1. 串1.1 串的定义ADT String{ 数据对象&#xff1a;D{ai|ai∈CharacterSet, i1, 2, …, n, n≧0} 数据关系&#xff1a;R1{|ai-1, ai∈D, i2, …, n} 基本操作&#xff1a; 生成一个值等于chars的串 复制一个串 判断串是否空串 比较串的大小 返回串元素的个数 将串清空 …

流媒体测试笔记记录之————阿里云监控、OBS、FFmpeg拉流和推流变化比较记录...

OBS设置视频&#xff08;512kbps&#xff09;和音频&#xff08;128kbps&#xff09;比特率 阿里云监控结果&#xff1a; 使用FFmpeg拉流到Nginx 服务器测试比特率 第二次测试&#xff0c;修改视频和音频比特率 OBS设置 阿里云监控 Nginx 比特率变化 FFMPEG 拉流截图

Java RandomAccessFile readChar()方法及示例

RandomAccessFile类readChar()方法 (RandomAccessFile Class readChar() method) readChar() method is available in java.io package. readChar()方法在java.io包中可用。 readChar() method is used to read a character value from this file and it can read character up…

python方差分析模型的预测结果怎么看_statsmodels中方差分析表结果解析

引言通常我们在对多个变量进行统计分析的时候&#xff0c;结果的汇总和整理需要耗费大量的时间和精力&#xff0c;稍有不慎还有可能出现错误。因此在对多个变量统计分析的时候&#xff0c;使用自动化的脚本对结果进行整理和汇总就十分的方便了。这里笔者使用Python当中的statsm…

Java PipedOutputStream connect()方法与示例

PipedOutputStream类的connect()方法 (PipedOutputStream Class connect() method) connect() method is available in java.io package. connect()方法在java.io包中可用。 connect() method is used to cause this PipedOutputStream to be connected to the given PipedInpu…

[转载] 中国象棋软件-引擎实现(一)概述

2005年6月我系第二批科技小组的项目正式确定为实现一款中国象棋对弈软件。基本功能包括人机对战、网络对战。我负责开发人机对战的引擎部分&#xff0c;也就是让计算机下棋。经过了暑假整整两个月的学习与实践&#xff0c;我终于初步完成了程序&#xff0c;虽然电脑的下棋水平实…

Java FilePermission getActions()方法与示例

FilePermission类的getActions()方法 (FilePermission Class getActions() method) getActions() method is available in java.io package. getActions()方法在java.io包中可用。 getActions() method is used to check whether this FilePermission and the given object are…

字符与编码(编码转换)

作为一名程序员&#xff0c;肯定有被乱码困扰的时候&#xff0c;真到了百思不得其解的时候&#xff0c;就会觉得&#xff1a;英文程序员真幸福。但其实只要明白编码之间的转换规律&#xff0c;其实乱码还是很好解决的。我们都知道字符串在保存和传输的时候需要先经过编码成二进…

mysql 刷新二进制日志_使用binlog日志恢复MySQL数据库删除数据的方法

binlog日志简介:binlog 就是binarylog&#xff0c;二进制日志文件&#xff0c;这个文件记录了MySQL所有的DDL和DML(除了数据查询语句)语句&#xff0c;以事件形式记录&#xff0c;还包含语句所执行的消耗的时间。binlog日志包括两类文件&#xff1a;1)二进制日志索引文件(文件名…

Java FileInputStream available()方法与示例

FileInputStream类的available()方法 (FileInputStream Class available() method) available() method is available in java.io package. available()方法在java.io包中可用。 available() method is used to return the number of bytes left that can be read from this Fi…

mysql 输出参数 sql语句_MySQL: 详细的sql语句

1添1.1【插入单行】insert [into] (列名) values (列值)例&#xff1a;insert into Strdents (姓名,性别,出生日期) values (开心朋朋,男,1980/6/15)1.2【将现有表数据添加到一个已有表】insert into (列名) select from 例&#xff1a;insert into tongxunlu (姓名,地址,电子邮…

执行git push出现Everything up-to-date

在github上git clone一个项目&#xff0c;在里面创建一个目录&#xff0c;然后git push的时候&#xff0c;出现报错"Everything up-to-date" 原因&#xff1a;1&#xff09;没有git add .2&#xff09;没有git commit -m "提交信息"如果上面两个步骤都成功…

Java File类boolean delete()方法(带示例)

文件类布尔型delete() (File Class boolean delete()) This method is available in package java.io.File.delete(). 软件包java.io.File.delete()中提供了此方法。 This method is used to delete file or directory by using delete() method and this method is accessible…

Unity3D Adam Demo的学习与研究

1.简述 这篇文章是对Adam各种相关资料了解后进行一些精简的内容。如果你想仔细研究某个技术请跳转至unity相关页面。 Adam官方页面: https://unity3d.com/cn/pages/adam 搬运视频以及资源包网盘下载: http://pan.baidu.com/s/1jH6NF86 Adam这个demo由8个人的团队耗时6个月(part…