mysql主從數據庫設置與同步的簡單介紹

本文目錄一覽:

如何實現兩個mysql數據庫之間的主從同步?

配置主的配置文件

vi /etc/my.cnf

創建複製用戶並授權給從服務器

grant replication slave on *.* to ‘rpl’@’192.168.162.130’ identified by ‘123456’;

重啟主服務器的MySQL  /etc/init.d/mysqld restart

查看master信息: 進入MySQL  show master status \G;

修改從庫配置文件

vi /etc/my.cnf

重啟從服務器MySQL,進入MySQL

指定主服務器IP等信息

change master to master_host=’192.168.162.128 ‘,master_user=’rpl’,master_password=’123456′,master_log_file=’mysql-bin.000001′,master_log_pos=647;

啟動slave  :start slave;

查看slave狀態:show slave status \G;

報錯Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work

意思是主和從必須都要有不同的uuid,我們分別去查看下主從的uuid

主:server-uuid=4e6c5a78-1e9a-11e7-8c65-000c29426312

查看從庫uuid  從庫uuid:server-uuid=4e6c5a78-1e9a-11e7-8c65-000c29426312

可以看出是真的一樣,原因在於 我是先安裝了一個虛擬機並裝好MySQL,後面有複製了一遍,作為從服務器,所以導致了這個UUID是一樣的。

接下來就是解決這個UUID問題,將從庫上的auto.cnf 備份下。然後重啟從庫。再看下從庫的UUID

[auto]

server-uuid=2e9c834a-1eb2-11e7-864b-000c2928472e

再次查看從庫狀態

從庫狀態正常了

11.測試主從是否正常

主庫上創建一個測試庫,test :create database test;

創建測試表:

create table test.test(

id int,

username varchar(10)

)ENGINE=’innodb’

12.查看從庫: 

正常,說明主從搭建成功

請問Mysql主從同步問題

mysql主從同步的步驟

一、主機環境

主機:

master操作系統:rhel6.0

IP:172.16.0.100

MySQL版本:5.1.47

從機:

slave操作系統:rhel6.0

IP:172.16.0.200

MySQL版本:5.1.47

二、創建數據庫

分別登錄master機和slave機的mysql:mysql –u root –p

創建數據庫:create database repl;

三、master機和slave機的相關配置

1、修改master機器中mysql配置文件my.cnf,該文件在/etc目錄下

在[mysqld]配置段添加如下字段

server-id=1

log-bin=mysql-bin

binlog-do-db=repl //需要同步的數據庫,如果沒有本行,即表示同步所有的數據庫

binlog-ignore-db=mysql //被忽略的數據庫

在master機上為slave機添加一同步帳號

grant replication slave on *.* to ‘replication’@’172.16.0.200’ identified by ‘123456’;

重啟master機的mysql服務:service mysqld restart

用show master status 命令看日誌情況

mysqlshow master status;

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

| log.000003 | 98 | repl | mysql |

1 row in set (0.00 sec)

2、修改slave機中mysql配置文件

同樣在[mysqld]字段下添加如下內容

server-id=2

master-host=172.16.0.100

master-user=repl

master-password=123456

master-port=3306

master-connect-retry=60

replicate-do-db=repl //同步的數據庫,不寫本行 表示 同步所有數據庫

然後重啟slave機的mysql

在slave機中進入mysql

mysqlstart slave;

mysqlshow slave status\G;

如果Slave_IO_Running、Slave_SQL_Running狀態為Yes則表明設置成功。

這時 再執行show slave status\G

mysql主從數據庫不同步的2種解決方法

今天發現Mysql的主從數據庫沒有同步

先上Master庫:

mysqlshow

processlist;

查看下進程是否Sleep太多。發現很正常。

show

master

status;

也正常。

mysql

show

master

status;

+——————-+———-+————–+——————————-+

|

File

|

Position

|

Binlog_Do_DB

|

Binlog_Ignore_DB

|

+——————-+———-+————–+——————————-+

|

mysqld-bin.000001

|

3260

|

|

mysql,test,information_schema

|

+——————-+———-+————–+——————————-+

1

row

in

set

(0.00

sec)

再到Slave上查看

mysql

show

slave

status\G

Slave_IO_Running:

Yes

Slave_SQL_Running:

No

可見是Slave不同步

下面介紹兩種解決方法:

方法一:忽略錯誤後,繼續同步

該方法適用於主從庫數據相差不大,或者要求數據可以不完全統一的情況,數據要求不嚴格的情況

解決:

stop

slave;

#表示跳過一步錯誤,後面的數字可變

set

global

sql_slave_skip_counter

=1;

start

slave;

之後再用mysql

show

slave

status\G

查看:

Slave_IO_Running:

Yes

Slave_SQL_Running:

Yes

ok,現在主從同步狀態正常了。。。

方式二:重新做主從,完全同步

該方法適用於主從庫數據相差較大,或者要求數據完全統一的情況

解決步驟如下:

1.先進入主庫,進行鎖表,防止數據寫入

使用命令:

mysql

flush

tables

with

read

lock;

注意:該處是鎖定為只讀狀態,語句不區分大小寫

2.進行數據備份

#把數據備份到mysql.bak.sql文件

[root@server01

mysql]#mysqldump

-uroot

-p

-hlocalhost

mysql.bak.sql

這裡注意一點:數據庫備份一定要定期進行,可以用shell腳本或者python腳本,都比較方便,確保數據萬無一失

3.查看master

狀態

mysql

show

master

status;

+——————-+———-+————–+——————————-+

|

File

|

Position

|

Binlog_Do_DB

|

Binlog_Ignore_DB

|

+——————-+———-+————–+——————————-+

|

mysqld-bin.000001

|

3260

|

|

mysql,test,information_schema

|

+——————-+———-+————–+——————————-+

1

row

in

set

(0.00

sec)

4.把mysql備份文件傳到從庫機器,進行數據恢復

#使用scp命令

[root@server01

mysql]#

scp

mysql.bak.sql

root@192.168.128.101:/tmp/

5.停止從庫的狀態

mysql

stop

slave;

6.然後到從庫執行mysql命令,導入數據備份

mysql

source

/tmp/mysql.bak.sql

7.設置從庫同步,注意該處的同步點,就是主庫show

master

status信息里的|

File|

Position兩項

change

master

to

master_host

=

‘192.168.128.100’,

master_user

=

‘rsync’,

master_port=3306,

master_password=”,

master_log_file

=

‘mysqld-bin.000001’,

master_log_pos=3260;

8.重新開啟從同步

mysql

stop

slave;

9.查看同步狀態

mysql

show

slave

status\G

查看:

Slave_IO_Running:

Yes

Slave_SQL_Running:

Yes

好了,同步完成啦。

如何對MySQL數據庫中的數據進行實時同步

實現兩個Mysql數據庫之間同步同步原理:

MySQL 為了實現replication 必須打開bin-log 項,也是打開二進制的MySQL 日誌記錄選項。MySQL 的bin log 二

進制日誌,可以記錄所有影響到數據庫表中存儲記錄內容的sql 操作,如insert / update / delete 操作,而不記錄

select 這樣的操作。因此,我們可以通過二進制日誌把某一時間段內丟失的數據可以恢復到數據庫中(如果二進制日

志中記錄的日誌項,包涵數據庫表中所有數據,那麼, 就可以恢複本地數據庫的全部數據了)。 而這個二進制日誌,

如果用作遠程數據庫恢復,那就是replication 了。這就是使用replication 而不用sync 的原因。這也是為什麼要設

置bin-log = 這個選項的原因。

在同步過程中,最重要的同步參照物,就是同步使用那一個二進制日誌文件,從那一條記錄開始同步。下面就介紹

下怎樣實現兩個Mysql數據庫之間的主從同步。

一、 概述

  MySQL從3.23.15版本以後提供數據庫複製(replication)功能,利用該功能可以實現兩個數據庫同步、主從模式、

互相備份模式的功能。本文檔主要闡述了如何在linux系統中利用mysql的replication進行雙機熱備的配置。

二、 環境

操作系統:Linux 2.6.23.1-42.fc8 # SMP(不安裝XEN)

Mysql版本:5.0.45-4.fc8

設備環境:PC(或者虛擬機)兩台

三、 配置

數據庫同步複製功能的設置都在MySQL的配置文件中體現,MySQL的配置文件(一般是my.cnf):在本環境下

為/etc/my.cnf。

3.1 設置環境:

IP的設置:

A主機 IP:10.10.0.119

Mask:255.255.0.0

B主機 IP:10.10.8.112

Mask:255.255.0.0

在IP設置完成以後,需要確定兩主機的防火牆確實已經關閉。可以使用命令service iptables status查看防火牆狀態

。如果防火牆狀態為仍在運行。使用service iptables stop來停用防火牆。如果想啟動關閉防火牆,可以使用setup命

令來禁用或定製。

最終以兩台主機可以相互ping通為佳。

3.2 配置A主(master) B從(slave)模式

3.2.1 配置A 為master

  1、增加一個用戶同步使用的帳號:

GRANT FILE ON *.* TO ‘backup’@’10.10.8.112′ IDENTIFIED BY ‘1234’;

GRANTREPLICATION SLAVE ON *.* TO ‘backup’@’10.10.8.112′ IDENTIFIED BY ‘1234’;

賦予10.10.8.112也就是Slave機器有File權限,只賦予Slave機器有File權限還不行,還要給它REPLICATION SLAVE的權

限才可以。

2、增加一個數據庫作為同步數據庫:

create databbse test;

3、創建一個表結構:

create table mytest (username varchar(20),password varchar(20));

4、修改配置文件:

修改A的/etc/my.cnf文件,在my.cnf配置項中加入下面配置:

server-id = 1 #Server標識

log-bin

binlog-do-db=test #指定需要日誌的數據庫

5、重起數據庫服務:

service mysqld restart

查看server-id:

show variable like ‘server_id’;

實例:

mysql show variables like ‘server_id’;

+—————+——-+

| Variable_name | Value |

+—————+——-+

| server_id | 1 |

+—————+——-+

1 row in set (0.00 sec)

6、用show master status/G命令看日誌情況。

正常為:

mysql show master status/G

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

File: mysqld-bin.000002

positiion: 198

Binlog_Do_DB: test,test

Binlog_Ignore_DB:

1 row in set (0.08 sec)

3.2.2 配置B 為slave

1、增加一個數據庫作為同步數據庫:

create databbse test;

2、創建一個表結構:

create table mytest (username varchar(20),password varchar(20));

3、修改配置文件:

修改B的/etc/my.cnf文件,在my.cnf配置項中加入下面配置:

server-id=2

master-host=10.10. 0.119

master-user=backup #同步用戶帳號

master-password=1234

master-port=3306

master-connect-retry=60 #預設重試間隔60秒

replicate-do-db=test #告訴slave只做backup數據庫的更新

5、重起數據庫服務:

service mysqld restart

查看server-id:

show variables like ‘server_id’;

實例:

mysql show variables like ‘server_id’;

+—————+——-+

| Variable_name | Value |

+—————+——-+

| server_id | 2 |

+—————+——-+

1 row in set (0.00 sec)

6、用show slave status/G命令看日誌情況。

正常為:

mysql show slave status/G

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

Slave_IO_State: Waiting for master to send event

Master_Host: 10.10.0.119

Master_User: backup

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysqld-bin.000001

Read_Master_Log_Pos: 98

Relay_Log_File: mysqld-relay-bin.000003

Relay_Log_Pos: 236

Relay_Master_Log_File: mysqld-bin.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB: test,test

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 98

Relay_Log_Space: 236

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

1 row in set (0.01 sec)

3.2.3 驗證配置

分別使用insert, delete , update在A主機進行增刪改查數據庫;查看B主機的數據庫是否與A主機一致;若一致,則配

置成功。

3.3雙機互備模式

如果在A主機加入slave設置,在B主機加入master設置,則可以做B-A的同步。

1、在A主機的配置文件中 mysqld配置項加入以下設置:

master-host=10.10.8.112

master-user=backup

master-password=1234

replicate-do-db=test

master-connect-retry=10

2、在B的配置文件中 mysqld配置項加入以下設置:

log-bin

binlog-do-db=test

注意:當有錯誤產生時,*.err日誌文件同步的線程退出,當糾正錯誤後,要讓同步機制進行工作,運行slave

start。

重起A、B機器,則可以實現雙向的熱備份。

總之,成功完成以上配置後,在主服務器A的test庫里添加數據或刪除數據,在從服務器B的test庫里馬上也能

看到相應的變更。兩台服務器的同步操作可以說是瞬間完成的。

如何配置兩個MySQL數據庫之間的主從同步功能?

IP的設置:A主機

IP:10.10.0.119;Mask:255.255.0.0;B主機

IP:10.10.8.112;Mask:255.255.0.0

在IP設置完成以後,需要確定兩主機的防火牆確實已經關閉。可以使用命令service

iptables

status查看防火牆狀態。如果防火牆狀態。

為仍在運行。使用service

iptables

stop來停用防火牆。如果想啟動關閉防火牆,可以使用setup命令來禁用或定製。最終以兩台主機可以相互ping通為佳。

3.2

配置A主(master)

B從(slave)模式;3.2.1

配置A

為master。

增加一個用戶同步使用的帳號:

GRANT

FILE

ON

*.*

TO

‘backup’@’10.10.8.112′

IDENTIFIED

BY

‘1234’;

GRANTREPLICATION

SLAVE

ON

*.*

TO

‘backup’@’10.10.8.112′

IDENTIFIED

BY

‘1234’。

賦予10.10.8.112也就是Slave機器有File權限,只賦予Slave機器有File權限還不行,還要給它REPLICATION

SLAVE的權限才可以。

增加一個數據庫作為同步數據庫:create

database

test;

創建一個表結構:create

table

mytest

(username

varchar(20),password

varchar(20));

修改配置文件:修改A的/etc/my.cnf文件。

在my.cnf配置項中加入下面配置:

server-id

=

1

#Server標識

log-bin

binlog-do-db=test

#指定需要日誌的數據庫

重起數據庫服務:

service

mysqld

restart

查看server-id:

show

variable

like

‘server_id’。

原創文章,作者:RZDF,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/135563.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
RZDF的頭像RZDF
上一篇 2024-10-04 00:13
下一篇 2024-10-04 00:13

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的“畫筆”在窗口中繪製…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • Python櫻花樹代碼簡單

    本文將對Python櫻花樹代碼進行詳細的闡述和講解,幫助讀者更好地理解該代碼的實現方法。 一、簡介 櫻花樹是一種圖形效果,它的實現方法比較簡單。Python中可以通過turtle這…

    編程 2025-04-28

發表回復

登錄後才能評論