網(wǎng)上有很多關(guān)于pos機(jī)導(dǎo)入數(shù)據(jù)庫,mysql主從集群搭建的知識(shí),也有很多人為大家解答關(guān)于pos機(jī)導(dǎo)入數(shù)據(jù)庫的問題,今天pos機(jī)之家(m.afbey.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來看下吧!
本文目錄一覽:
pos機(jī)導(dǎo)入數(shù)據(jù)庫
文章首發(fā)于微信公眾號(hào):java架構(gòu)師進(jìn)階之路
前言:
Mysql數(shù)據(jù)庫沒有增量備份的機(jī)制,當(dāng)數(shù)據(jù)量太大的時(shí)候備份是一個(gè)很大的問題。還好mysql數(shù)據(jù)庫提供了一種主從備份的機(jī)制,其實(shí)就是把主數(shù)據(jù)庫的所有的數(shù)據(jù)同時(shí)寫到備份的數(shù)據(jù)庫中。實(shí)現(xiàn)mysql數(shù)據(jù)庫的熱備份。
要想實(shí)現(xiàn)雙機(jī)的熱備,首先要了解主從數(shù)據(jù)庫服務(wù)器的版本的需求。要實(shí)現(xiàn)熱備mysql的版本都高于3.2。還有一個(gè)基本的原則就是作為從數(shù)據(jù)庫的數(shù)據(jù)版本可以高于主服務(wù)器數(shù)據(jù)庫的版本,但是不可以低于主服務(wù)器的數(shù)據(jù)庫版本。
mysql 主從備份工作原理
主從簡(jiǎn)單的說就是把 一個(gè)服務(wù)器上執(zhí)行過的sql語句在別的服務(wù)器上也重復(fù)執(zhí)行一遍, 這樣只要兩個(gè)數(shù)據(jù)庫的初態(tài)是一樣的,那么它們就能一直同步。
當(dāng)然這種復(fù)制和重復(fù)都是mysql自動(dòng)實(shí)現(xiàn)的,我們只需要配置即可。
我們進(jìn)一步詳細(xì)介紹原理的細(xì)節(jié), 這有一張圖:
上圖中有兩個(gè)服務(wù)器, 演示了從一個(gè)主服務(wù)器(master) 把數(shù)據(jù)同步到從服務(wù)器(slave)的過程。
這是一個(gè)主-從復(fù)制的例子。
對(duì)于一個(gè)mysql服務(wù)器, 一般有兩個(gè)線程來負(fù)責(zé)復(fù)制和被復(fù)制。當(dāng)開啟復(fù)制之后。
1. 作為主服務(wù)器Master, 會(huì)把自己的每一次改動(dòng)都記錄到 二進(jìn)制日志 Binarylog 中。(從服務(wù)器會(huì)負(fù)責(zé)來讀取這個(gè)log, 然后在自己那里再執(zhí)行一遍。)
2. 作為從服務(wù)器Slave, 會(huì)用master上的賬號(hào)登陸到 master上, 讀取master的Binarylog, 寫入到自己的中繼日志 Relaylog, 然后自己的sql線程會(huì)負(fù)責(zé)讀取這個(gè)中繼日志,并執(zhí)行一遍。 到這里主服務(wù)器上的更改就同步到從服務(wù)器上了。
集群搭建
1.集群環(huán)境如下:
2.mysql數(shù)據(jù)安裝mysql安裝相對(duì)簡(jiǎn)單,這里不做介紹,如果不熟悉的可以查看相關(guān)資料。
3.Master(6.84)節(jié)點(diǎn)配置
(1)修改my.cnf文件,在[mysqld]加入下面的內(nèi)容:
# 服務(wù)的唯一編號(hào)
server-id = 1
# 開啟mysql binlog功能
log-bin = mysql-bin
# binlog記錄內(nèi)容的方式,記錄被操作的每一行
binlog_format = ROW
# 減少記錄日志的內(nèi)容,只記錄受影響的列
binlog_row_image = minimal
# 指定需要復(fù)制的數(shù)據(jù)庫名為test,主庫從庫必須一樣
binlog-do-db = test
(2)修改好配置文件,重啟mysql服務(wù)
service mysql restart
(3)創(chuàng)建從庫同步數(shù)據(jù)的賬號(hào)
登錄mysql客戶端:
./mysql -u root –p
然后添加一個(gè)用戶【用于在從庫主機(jī)中登錄進(jìn)行同步】:
create user 'replicate'@'%' identified by 'replicate';
再對(duì)該用戶授予復(fù)制權(quán)限:
grant replication slave on *.* to 'replicate'@'%';
*****【我以為這里可以更進(jìn)一步寫成:grant replication slave on test.* to 'replicate'@'%';】
使執(zhí)行生效:
flush privileges;
(4)查看一下主庫的狀態(tài)
show master status\\G;
需要注意的是:如果沒有上面第3步操作,執(zhí)行show master status \\G;會(huì)報(bào)錯(cuò),如下圖:
file:表示同步的bin-log信息從哪個(gè)文件開始;
position:表示從file的哪個(gè)位置開始;
binlog_do_db:表示同步哪一個(gè)庫
在后面的slave配置中,這三個(gè)結(jié)果都需要使用到。
4.Slave(6.85)節(jié)點(diǎn)配置
配置從庫
(1)修改my.cnf文件,在[mysqld]加入下面的內(nèi)容:
# 服務(wù)的唯一編號(hào)
server-id = 2
# 開啟mysql binlog功能
log-bin = mysql-bin
# binlog記錄內(nèi)容的方式,記錄被操作的每一行
binlog_format = ROW
# 減少記錄日志的內(nèi)容,只記錄受影響的列
binlog_row_image = minimal
# 指定需要復(fù)制的數(shù)據(jù)庫名為test
replicate-do-db = test
(2)修改好配置文件,重啟mysql服務(wù)
service mysql restart
(3)執(zhí)行同步命令
給從設(shè)置主服務(wù)器ip,同步賬號(hào)密碼,同步位置
mysql的終端執(zhí)行:
change master to master_host='192.168.6.84',master_port=3306,master_user='replicate',master_password='replicate',master_log_file='mysql-bin.000001',master_log_pos=749;
命令需要特別注意:master_log_file 和master_log_pos 2個(gè)屬性內(nèi)容,這2個(gè)屬性是剛才主服務(wù)器上執(zhí)行show master status\\G;查詢出來的內(nèi)容。
(3) 開啟從機(jī)角色的
start slave;
(4)查看從庫的狀態(tài)
mysql的終端執(zhí)行:
show slave status\\G;
返回信息為
當(dāng):Slave_IO_Running和Slave_SQL_Running的狀態(tài)都為Yes時(shí),說明從庫配置成功。
4.測(cè)試驗(yàn)證
首先在主庫上創(chuàng)建test庫:
create database test character set 'utf8';
依次執(zhí)行:
use test;
show tables;
主庫此時(shí)仍然沒有表,查看從庫
依次執(zhí)行上述3條命令:
show databases;
use test;
show tables;
查詢可知:slave節(jié)點(diǎn)的test庫同樣為空。
此時(shí)可以證明,主庫的修改(創(chuàng)建了test)成功同步到從庫中了。
接著在master節(jié)點(diǎn)上創(chuàng)建表people。
create table people(id int ,name varchar(20)) character set 'utf8';
show tables;
接著在slave上驗(yàn)證:
發(fā)現(xiàn)數(shù)據(jù)已經(jīng)進(jìn)行了同步。
至此,mysql的主備已經(jīng)搭建完畢。
6、擴(kuò)展
問題1:上述介紹的是備份某個(gè)庫的操作,如果需要備份多個(gè)庫則直接在master的my.cnf中添加新的一行binlog-do-db=test_2等等即可。這行代碼的意思是指:同步該庫(test_2)的bin-log信息。
問題2:這種直接修改master節(jié)點(diǎn)的my.cnf文件去同步某個(gè)庫,需要重啟master才能讓整個(gè)mysql集群工作,有沒有一種方法可以搭建備庫,但是不需要重啟master?
顯然是可以的,不過這次備份的庫是master的全部庫了(因?yàn)闆]有指定具體庫的bin-log), 所以默認(rèn)就把全部的bin-log都同步了。可以參考如下的步驟:
step 1:導(dǎo)出Master節(jié)點(diǎn)中所有的數(shù)據(jù)庫
mysqldump -uroot -A --routines --single-transaction --master-data=2 > /data1/mysqldump/alldatabases.sql
參數(shù)注釋:
-A:導(dǎo)出所有庫的數(shù)據(jù)
--routines Dump stored routines (procedures and functions) from dumped databases
--single-transaction Issue a BEGIN SQL statement before dumping data from server
--master-data Write the binary log file name and position to the output
這里添加option:--master-data之后,就可以不再使用show master status\\G;去查看bin-log的file和position了。
step 2:
將上述的sql文件導(dǎo)入到備庫中。
step 3:
其余步驟同上述內(nèi)容【在master上創(chuàng)建一個(gè)用戶,并授權(quán),然后刷新】;在slave上執(zhí)行change操作。
以上為全部?jī)?nèi)容。
歡迎關(guān)注微信公眾號(hào):java架構(gòu)師進(jìn)階之路
以上就是關(guān)于pos機(jī)導(dǎo)入數(shù)據(jù)庫,mysql主從集群搭建的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于pos機(jī)導(dǎo)入數(shù)據(jù)庫的知識(shí),希望能夠幫助到大家!
