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.pswp.cn/news/541966.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541966.shtml
英文地址,請注明出處:http://en.pswp.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…