mysql數據庫複製技巧集錦

 最近在學習關於mysql的數據庫複製方面的東東,蒐集了一些資料,整理如下:
1:mysql手動複製數據庫技巧
2:MYSQL 複製範例詳解
3:MYSQL數據同步備份複製電腦網絡
4:MySql數據庫同步複製;mysql數據複製方案
5:MySQL異步複製備忘
6:mysql的root口令忘記了怎麼辦?
7:【翻譯】MYSQL數據庫複製

mysql數據庫複製技巧集錦

 

 

1:mysql手動複製數據庫技巧
引用源博文網址:http://blog.ccidnet.com/blog/ccid/do_showone/tid_49707.html

我工作的環境中,有一個開發的MYSQL數據庫,一個處於生產環境的MYSQL數據庫。我不定期的從生產環境複製數據到我哦大開發環境。以前,我都是導出到腳本,然後再導入。其實,利用‘mysqldump’命令以及管道操作符,還有‘mysql’可以一步完成。

命令是:
mysqldump wap --opt | mysql wap -h 221.218.9.41

我下面對這個命令的幾個部分說明一下。mysqldump wap --opt,是把名爲wap的這個數據庫導出到標準輸出。並且使用--opt選項。 --opt 等效於--add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, 和--disable-keys。這在完全導出然後完全導入數據的時候,非常有用。在這裏,我沒有指定登陸帳號和密碼,因爲我的配置文件my.cnf已經指定了。

然後是一個管道操作符。它的作用是把第二個的輸出轉爲第二個命令的輸出。在這裏,我沒有指定登陸帳號和密碼,因爲我的配置文件my.cnf已經指定了。

第三個命令,則是我們常用的mysql命令行客戶端,-h選項指定了目標機器。

希望我寫的這個小技巧,能夠對你有用。不過,你前晚得小心了——別弄反了導入和導出的方向。

 

 



2:MYSQL 複製範例詳解
 http://www.cublog.cn/u/15758/showart.php?id=181596
 
                          MYSQL 複製範例詳解
首先準備主從服務器
主A-192.168.100.1
從B-192.168.100.2
上面安裝儘量爲相同版本的MYSQL
如果使用不同版本時,則從庫的MYSQL版本可以高於主庫,反之不然
1.配置主庫/etc/my.cnf
my.cnf中要有一下兩句:
在[mysqld]添加如下參數
server-id = 1
log-bin
一般來說,my.cnf應該在/etc下面,如果是rpm安裝,也可以在/var/lib/mysql下面。
2.鎖主庫表
mysql> flush tables with read lock;
注意,鎖表之後,所有對於該數據庫的寫操作都將被禁止。
因此應該已經確切準備好下一步的操作之後,再按回車執行建議開兩個窗口,
一個用於mysql,一個用於命令行
3. 備份主庫數據文件
cd /dateDirectory       #數據文件存放目錄
cp -r mysql mysql_0227 
上面假設是rpm缺省安裝。在文件複製過程中,就可以進行下一步了。
[編輯]記錄二進制文件位置
回到剛纔的mysql窗口
mysql> show master status;
得到如下結果:
+---------------+----------+--------------+------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| zx-bin.000002 |       98 |              |                  |
+---------------+----------+--------------+------------------+
[編輯]解鎖
待文件複製完成,就可以解鎖了
mysql> unlock tables;
此時,主庫已經恢復正常工作。以後的操作不會影響master的工作了。
[編輯]在主庫生成複製用戶權限
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replman'@'%' IDENTIFIED BY 'xplus';
mysql> flush privileges;
[編輯]複製數據文件到從庫
替換已經存在的從庫data目錄,並
chown -Rf mysql:mysql  mysql
修改數據文件屬性
[編輯]修改從庫的my.cnf
方法同步驟1,但server_id要與其它服務器不同
[編輯]啓動從庫
重新啓動從庫
mysql >CHANGE MASTER TO
    MASTER_HOST='192.168.100.1',
    MASTER_USER='replman',
    MASTER_PASSWORD='xplus',
    MASTER_LOG_FILE='zx-bin.000002',
    MASTER_LOG_POS=98;
其中,MASTER_HOST是主庫IP,用戶名密碼在上面生成主庫複製用戶的命令中,日誌文件名和位置在show master status步驟中得到
[編輯]啓動複製
mysql >start slave
mysql >show slave status
 
                                                     BY:IORI

 

3:MYSQL數據同步備份複製電腦網絡
一帥
http://www.bloghome.cn/posts/25330
發表於2006-04-20 22:17
設置 MySql 數據同步
  mysql從3.23.15版本以後提供數據庫複製功能。利用該功能可以實現兩個數據庫同步,主從模式,互相備份模式的功能
  數據庫同步複製功能的設置都在mysql的設置文件中體現。mysql的配置文件(一般是my.cnf),在unix環境下在/etc/mysql/my.cnf 或者在mysql用戶的home目錄下的my.cnf。
  window環境中,如果c:根目錄下有my.cnf文件則取該配置文件。當運行mysql的winmysqladmin.exe工具時候,該工具會把c:根目錄下的my.cnf 命名爲mycnf.bak。並在winnt目錄下創建my.ini。mysql服務器啓動時候會讀該配置文件。所以可以把my.cnf中的內容拷貝到my.ini文件中,用my.ini文件作爲mysql服務器的配置文件。
  設置方法:
  設置範例環境:
  操作系統:window2000 professional
  mysql:4.0.4-beta-max-nt-log
  A ip:10.10.10.22
  B ip:10.10.10.53
  A:設置
  1.增加一個用戶最爲同步的用戶帳號:
   
GRANT FILE ON *.* TO backup@'10.10.10.53' IDENTIFIED BY ‘1234’
 
  2.增加一個數據庫作爲同步數據庫:
   
create database backup

  B:設置
  1.增加一個用戶最爲同步的用戶帳號:
    
GRANT FILE ON *.* TO backup@'10.10.10.22' IDENTIFIED BY ‘1234’


 2.增加一個數據庫作爲同步數據庫:
    
create database backup

  主從模式:A->B

  A爲master

  修改A mysql的my.ini文件。在mysqld配置項中加入下面配置:

server-id=1log-bin#設置需要記錄log 可以設置log-bin=c:mysqlbakmysqllog 設置日誌文件的目錄,#其中mysqllog是日誌文件的名稱,mysql將建立不同擴展名,文件名爲mysqllog的幾個日誌文件。binlog-do-db=backup #指定需要日誌的數據庫

 


  重起數據庫服務。

  用show master status 命令看日誌情況。

  B爲slave

  修改B mysql的my.ini文件。在mysqld配置項中加入下面配置:


    
server-id=2master-host=10.10.10.22master-user=backup 
 


#同步用戶帳號


    
master-password=1234master-port=3306master-connect-retry=60
 


預設重試間隔60秒replicate-do-db=backup 告訴slave只做backup數據庫的更新

 

 重起數據庫

  用show slave status看同步配置情況。

  注意:由於設置了slave的配置信息,mysql在數據庫目錄下生成master.info,所以如有要修改相關slave的配置要先刪除該文件。否則修改的配置不能生效。

  雙機互備模式。

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

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


    
master-host=10.10.10.53master-user=backupmaster-password=1234replicate-do-db=backupmaster-connect-retry=10
 


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


    
log-bin=c:mysqllogmysqllogbinlog-do-db=backup
 


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

重起AB機器,則可以實現雙向的熱備。

  測試:

  向B批量插入大數據量表AA(1872000)條,A數據庫每秒鐘可以更新2500條數據。

 


4:MySql數據庫同步複製

 

摘自 longrujun 的 Blog  (作者Blog:http://blog.csdn.net/longrujun/
關鍵字   MySql數據庫同步複製
    該功能可以實現兩個數據庫同步,主從模式,互相備份模式的功能。
數據庫同步複製功能的設置都在mysql的設置文件中體現。mysql的配置文件(windows下爲my.ini,Unix/Linux下爲my.cnf)
1、實施環境:
  操作系統:2臺linux AS 4[up3]
  mysql:mysql-4.1.15.tar.gz
  SvrA ip:192.168.1.10
  SvrB ip:192.168.1.11
2、配置方法
Demo 1:主從模式[Master->Slave]:A->B
=====step 1:分別在SvrA、SvrB上配置同步DB及Account=====
Step A:SvrA上配置
  1.增加一個用戶最爲同步的用戶帳號:
  GRANT FILE ON *.* TO backup.user@'192.168.1.11' IDENTIFIED BY ‘rsync.mysql’;
  2.增加一個數據庫作爲同步數據庫:
  create database backup;
  Step B:SvrB上配置
  1.增加一個用戶最爲同步的用戶帳號:
  GRANT FILE ON *.* TO backup.user@'192.168.1.10' IDENTIFIED BY ‘rsync.mysql’;
  2.增加一個數據庫作爲同步數據庫:
  create database backup;
    ====step 2:配置Master、Slave參數====== 
主從模式:A->B即  SvrA爲master ,SvrB爲slave
  1、修改SvrA 中mysql的my.cnf文件。在mysqld配置項中加入下面配置:
server-id=1
log-bin
binlog-do-db=backup

注:Log-bin #設置需要記錄log 可以設置log-bin=/Data/logs/mysqllog 設置日誌文件的目錄[其中mysqllog是日誌文件的名稱,mysql將建立不同擴展名,文件名爲mysqllog的幾個日誌文件]。
  binlog-do-db=backup #指定需要日誌的數據庫

配置完後重起數據庫服務。
  用show master status 命令看日誌情況。
  2、修改SvrB中 mysql的my.cnf文件。在mysqld配置項中加入下面配置:
  server-id=2
  master-host=192.168.1.10
  master-user=backup.user #同步用戶帳號
  master-password=rsync.mysql
  master-port=3306
  master-connect-retry=10 預設重試間隔10秒
  replicate-do-db=backup 告訴slave只做backup數據庫的更新

  配置完後重起數據庫

  用show slave status看同步配置情況。
  注意:由於設置了slave的配置信息,mysql在數據庫目錄下生成master.info
  所以如有要修改相關slave的配置要先刪除該文件。否則修改的配置不能生效。
Demo 2、雙機互備模式。
  如果在A加入slave設置,在B加入master設置,則可以做B->A的同步。
  在A的配置文件中 mysqld 配置項加入以下設置:
  master-host=192.168.1.11
  master-user=backup.user
  master-password=rsync.mysql
  replicate-do-db=backup
  master-connect-retry=10
  在B的配置文件中 mysqld 配置項加入以下設置:
  log-bin
  binlog-do-db=backup
  注意:當有錯誤產生時*.err日誌文件。同步的線程退出,當糾正錯誤後要讓同步機制進行工作,運行slave start
  重起AB機器,則可以實現雙向的熱備。

注:
1、 在處理Slave中MYSQL,默認是啓用server-id=1,所以將其修改爲server-id=2
2、 在測試時,可以測試一下互連狀態
Mysql –h ServerA/B –u backup.user –p
3、 關於Master->多個Slave,可以參考MYSQL官方文檔
推薦1、http://dev.mysql.com/doc/
2、http://www.mysql.com/why-mysql/white-papers/
3、http://www.mysql.com/products/database/cluster/
 


4:mysql數據複製方案
[來自jollr.com]
2003年12月15日 12:00 1樓
   現在找一個提供免費MYSQL的網站真不容易,即便找到了也不提供file權限,管理數據怎麼辦?用phpMyAdmin在線一條一條的插入?如果想搬家呢?
所以本人在一開始便設計了一套數據管理方案:
在本地將數據保存成TXT文件,FTP上傳,PHP程序將其逐行讀出,寫入MYSQL。導出時反之。

 

日前偶上OSO論談,看到有網友正苦於此事,現將源代碼公佈,供大家分享。如有漏洞,望指正。
由於時間關係本人並沒有設計出一個通用的程序,只是舉例說明。

mysql 表名:tbn
字段:
ssj: date
ssm: varchar(8)
bos: enum("s","b","f") default s
這裏只設計了三個字段,各有其特點,其它類型的字段可參照設計。

tbn.txt文件:
ssj ssm bos
------------------------------------
2001-04-05 record1 2
2001-04-06 record2 1
2001-04-08 record3 3
------------------------------------
爲了導入導出TXT的一致性,將mysql的ENUM字段轉存TXT文件時以索引號代替,這樣便於修改、更新記錄
1對應enum字段的s
2對應enum字段的b
3對應enum字段的f
字段間爲TAB符

txt2db.php
<?
require "connecthost.inc.php";//連接到MYSQL服務器,可別照抄
$tbn=$tbn;//mysql表名
$rf=file("$tbn.txt");//file是一個將TXT文件按行直接讀入數組的函數
$rfs=count($rf);
for ($k=0;$k<$rfs;$k++) {
$exstr=explode(chr(9),$rf[$k]);//EXPLODE是一個字符串分割函數,CHR(9)爲TAB符
$ins=mysql_query("insert into $tbn (ssj,ssm,bos) values(“$field[0]“,“$field[1]“,$field[2])");
$inss=$inss+$ins;
}
echo $inss."個記錄被插入<BR>";
mysql_close();
?>

db2txt.php
<?
require "connecthost.inc.php";
$tbn=$tbn;
//下面先得到ENUM字段的所有值及對應索引號,
//如果不明白,在DOS下運行一下show columns from $tbn like “bos“,分析一下返回的結果
$fea=mysql_query("show columns from $tbn like “bos“");
$fea_s=mysql_fetch_array($fea);
$fea_s2=$fea_s[“Type“];
$bosset=explode(",",substr($fea_s2,5,(strlen($fea_s)-6)));
$bossets=count($bosset);
for ($j=0;$j<$bossets;$j++){
$bosset[$j]=substr($bosset[$j],1,strlen($bosset[$j])-2);
}
$qh=mysql_query("select * from $tbn");
$fp=fopen("$tbn.txt","w"); //打開一個用於寫入的文件
while ($row=mysql_fetch_array($qh)) {
for ($i=0;$i<$bossets;$i++){
if ($row[2]==$bosset[$i]){
$bosdm=$i+1; //+1 because mysql enum index from 1,php array index from 0
break;
}//找到當前ENUM字段對索引號
}
$record=$row[0].chr(9).$row[1].chr(9).$bosdm.chr(13).chr(10);
//chr(9)爲TAB符,chr(13).chr(10)爲回車並換行
$sl=strlen($record);
$fps=fputs($fp,$record,$sl);//寫入文件
}
echo "$tbn trans over ".$fps;
fclose($fp);
mysql_close();
?>

當然,要先用FTP工具把TXT文件的屬性改爲可寫,才能寫入,想必這不用我說。
http://zjss.bbs.us/?act=program&rid=80046


5:MySQL異步複製備忘

 

http://blog.sina.com.cn/u/4b0710d8010007eo

一、異步複製基本原理

從MySQL3.23.15以後,MySQL支持單向的異步複製。也就是說,1臺MySQL服務器充當Master(主庫),1臺或多臺MySQL服務器充當Slaves(從庫),數據從Master向Slaves進行異步複製。注意,這種複製是異步的,有別於MySQL的同步複製實現(這種實現稱做MySQL集羣,MySQL Cluster)。

當主庫有更新的時候,主庫會把更新操作的SQL寫入二進制日誌(Bin log),並維護一個二進制日誌文件的索引,以便於日誌文件輪迴(Rotate)。在從庫啓動異步複製的時候,從庫會開啓兩個I/O線程,其中一個線程連接主庫,要求主庫把二進制日誌的變化部分傳給從庫,並把傳回的日誌寫入本地磁盤。另一個線程則負責讀取本地寫入的二進制日誌,並在本地執行,以反映出這種變化。較老的版本在複製的時候只啓用一個I/O線程,實現這兩部分的功能。

有幾個關鍵性的地方需要注意:

- 主庫必須啓用Bin log,主庫和從庫必須有唯一的Server Id
- 從庫必須清楚瞭解從主庫的哪一個Bin log文件的哪一個偏移位置起開始複製
- 從庫可以從主庫只複製指定的數據庫,或者數據庫的某些數據表
- 主庫和從庫的數據庫名稱可以不一樣,不過還是推薦使用一樣的名稱
- 主庫和從庫的MySQL版本需保持一致

二、如何配置MySQL複製

我們在同一臺機器做實驗,1個主庫,兩個從庫。基本情況如下:
- 主庫
端口號:3308
數據目錄:/var/lib/dbmaster
配置文件:/var/lib/dbmaster/my.cnf

- 從庫1
端口號:3309
數據目錄:/var/lib/dbslave1
配置文件:/var/lib/dbslave1/my.cnf

- 從庫2
端口號:3310
數據目錄:/var/lib/dbslave2
配置文件:/var/lib/dbslave2/my.cnf

待同步的數據庫名位research,我們的目標是實現research從主庫複製到兩個從庫。

(1) 主庫的配置

首先,建立數據目錄位置。

# mkdir /var/lib/dbmaster

然後,編輯主庫的配置文件。

# vi /var/lib/dbmaster/my.cnf

寫入以下內容:

[mysqld]
datadir=/var/lib/dbmaster
socket=/var/lib/dbmaster/mysql.sock
port=3308
old_passwords=1

log-bin
server-id=1270000000013308
binlog-do-db=research

[mysqld_safe]
err-log=/var/lib/dbmaster/mysqld.log
pid-file=/var/lib/dbmaster/mysqld.pid

[mysql.server]
user=mysql
basedir=/var/lib

運行下面的命令,初始化數據目錄。

# mysql_install_db --defaults-file=/var/lib/dbmaster/my.cnf
# chown -R mysql.mysql /var/lib/dbmaster

注意,我們爲MySQL服務單獨建立了用戶mysql和用戶組mysql。初始化數據目錄後,必須把所有者改爲mysql。

現在,我們啓動主庫服務,在主庫創建數據庫research,並創建一個數據表test,然後插入一條記錄。

# mysqld_safe --defaults-file=/var/lib/dbmaster/my.cnf &
# mysql -uroot -S /var/lib/dbmaster/mysql.sock
mysql> create database research;
mysql> use research;
mysql> create table test (name varchar(20));
mysql> insert into test set name="explorer";
mysql> exit;

現在,我們配置主庫,讓從庫從當前點開始複製。

首先需要配置一個用於複製的MySQL帳號,用於從庫的連接。
我們鎖定整個主庫,避免主庫數據更新。
然後我們查看主庫的狀態,記錄下Bin log的文件名稱(下例爲localhost-bin.000003)和位置偏移(下例爲79)。

# mysql -uroot -S /var/lib/dbmaster/mysql.sock
mysql> GRANT REPLICATION SLAVE ON *.*
    -> TO 'repl'@'127.0.0.1' IDENTIFIED BY 'slavepass';
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+----------------------+----------+--------------+------------------+
| File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+----------+--------------+------------------+
| localhost-bin.000003 |       79 | research     |                  |
+----------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

然後我們另開一個終端開始下一步操作,注意保持原終端不要退出mysql。

(2) 從庫配置

首先,建立數據目錄位置。

# mkdir /var/lib/dbslave1

然後,編輯主庫的配置文件。

# vi /var/lib/dbslave1/my.cnf

寫入以下內容:

[mysqld]
datadir=/var/lib/dbslave1
socket=/var/lib/dbslave1/mysql.sock
port=3309
old_passwords=1

log-bin
server-id=1270000000013309
log-slave-updates

[mysqld_safe]
err-log=/var/lib/dbslave1/mysqld.log
pid-file=/var/lib/dbslave1/mysqld.pid

[mysql.server]
user=mysql
basedir=/var/lib

運行下面的命令,初始化數據目錄。

# mysql_install_db --defaults-file=/var/lib/dbslave1/my.cnf
# chown -R mysql.mysql /var/lib/dbslave1
# cp -ar /var/lib/dbmaster/research /var/lib/dbslave1

上面最後一條命令把主庫的research數據庫拷貝到了從庫,在主庫加了讀鎖的情況下這種拷貝是安全的。

現在,我們啓動從庫服務,啓用主庫到從庫的複製。

# mysqld_safe --defaults-file=/var/lib/dbmaster/my.cnf &
# mysql -uroot -S /var/lib/dbslave1/mysql.sock
mysql> CHANGE MASTER TO
    -> MASTER_HOST='127.0.0.1',
    -> MASTER_PORT=3308,
    -> MASTER_USER='repl',
    -> MASTER_PASSWORD='slavepass',
    -> MASTER_LOG_FILE='localhost-bin.000003',
    -> MASTER_LOG_POS=79;
mysql> START SLAVE;
mysql> EXIT;

另一個從庫配置與此類似。

(3) 同步測試

轉入我們在(1)中打開的終端,此時我們還在mysql的提示符下。運行下面的SQL解鎖並插入一條新記錄。

mysql> UNLOCK TABLES;
mysql> use research;
mysql> insert into test set name="mars";
mysql> exit;

如果正常的話應該可以在兩個從庫看到mars這條記錄了。

三、異步複製的進一步分析

啓用MySQL異步複製後,主庫爲每一個從庫打開了一個連接,這可通過show processlist這條SQL看出來。

mysql> show processlist G
*************************** 1. row ***************************
     Id: 1
   User: repl
   Host: localhost.localdomain:40245
     db: NULL
Command: Binlog Dump
   Time: 3404
  State: Has sent all binlog to slave; waiting for binlog to be updated
   Info: NULL
*************************** 2. row ***************************
     Id: 2
   User: repl
   Host: localhost.localdomain:40246
     db: NULL
Command: Binlog Dump
   Time: 3404
  State: Has sent all binlog to slave; waiting for binlog to be updated
   Info: NULL
*************************** 3. row ***************************
     Id: 4
   User: root
   Host: localhost.localdomain:38327
     db: NULL
Command: Query
   Time: 0
  State: NULL
   Info: show processlist
3 rows in set (0.00 sec)

線程Id爲1和2的是爲從庫開的連接,比較重要的信息是State,描述了當前同步狀態。

從庫會打開兩個線程,同樣我們也可以通過這個SQL語句看出來。

mysql> show processlist G
*************************** 1. row ***************************
     Id: 1
   User: system user
   Host:
     db: NULL
Command: Connect
   Time: 3575
  State: Waiting for master to send event
   Info: NULL
*************************** 2. row ***************************
     Id: 2
   User: system user
   Host:
     db: NULL
Command: Connect
   Time: 3575
  State: Has read all relay log; waiting for the slave I/O thread to update it
   Info: NULL
*************************** 3. row ***************************
     Id: 3
   User: root
   Host: localhost.localdomain:47107
     db: NULL
Command: Query
   Time: 0
  State: NULL
   Info: show processlist
3 rows in set (0.00 sec)

其中線程Id爲1的是複製線程,連接遠程的主庫,複製Bin Log到本地磁盤。線程Id爲2的是執行線程,負責執行本地磁盤同步過來的Bin Log。同樣State信息是關鍵信息。

關於State的詳細說明請參考http://dev.mysql.com/doc/refman/4.1/en/master-thread-states.html以及http://dev.mysql.com/doc/refman/4.1/en/slave-io-thread-states.html

從庫中關於複製有這麼一些文件是需要注意的:

# ls /var/lib/dbslave1
ibdata1               localhost-bin.000007  localhost-bin.000016        mysqld.log
ib_logfile0           localhost-bin.000008  localhost-bin.000017        mysqld.pid
ib_logfile1           localhost-bin.000009  localhost-bin.000018        mysql.sock
localhost-bin.000001  localhost-bin.000010  localhost-bin.index         relay-log.info
localhost-bin.000002  localhost-bin.000011  localhost-relay-bin.000012  research
localhost-bin.000003  localhost-bin.000012  localhost-relay-bin.index   test
localhost-bin.000004  localhost-bin.000013  master.info
localhost-bin.000005  localhost-bin.000014  my.cnf
localhost-bin.000006  localhost-bin.000015  mysql

*-reloay-bin.* 從主庫同步過來的Bin log文件
master.info 主庫帳號信息和同步信息
relay-log.info 跟蹤執行同步過來的Bin log的執行情況
mysqld.log 數據庫日誌,排錯的時候相當有用

四、其他工具

netstat命令查看當前監聽的網絡端口,我們可以憑此判斷MySQL端口是否開啓。

# nestat -nlt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 0.0.0.0:39137               0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:3308                0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:3309                0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:3310                0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:6000                0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN
tcp        0      0 :::6000                     :::*                        LISTEN

mysqlbinlog工具可查看二進制的Binlog文件,這對於判斷同步複製點很有用處。

# mysqlbinlog localhost-relay-bin.000012
...

mysqldump命令可用於數據複製前主從庫之間同步數據(在上節中我們是通過直接拷貝文件實現的)。

參考資料:

http://dev.mysql.com/doc/refman/4.1/en/replication.html

6:mysql的root口令忘記了怎麼辦?
數據庫 /linuxman 發表於2004-11-28 13:59
這真是糟糕的事情:-

 

停止mysql服務:/etc/init.d/mysql stop
這樣重啓mysqld:/usr/bin/mysqld_safe --skip-grant-tables &
然後執行mysql -h localhost mysql可以直接進入。
執行:use mysql; select * from user; 有沒有你記得口令的用戶?如果有的話,執行:update user set Password=''password'' where User=''user'' and Host=''localhost''; 上面user是你記得口令的用戶,password是用戶user的口令。這樣,root的口令就變成password啦:-)
如果所有用戶的口令都不記得了(真是糟糕!),那麼執行:
grant all on *.* to root@localhost identified by ''newpassword''; flush privileges;
或者:
update user SET password=password(''new_password'') WHERE user=''root'';

重新啓動mysql: /etc/init.d/mysql restart

 


 


7:【翻譯】MYSQL數據庫複製

日期:2007-01-04
作者:whsong 
 來源:   http://www.pc51.net/data/MySQL/2007-01-04/2599.html

儘量確保所安裝的MySQL版本是最新版本
4.1.x和4.0.x是相同的binary log format,所以他們中的任意兩個複製都不會有問題
下面給出了一個兼容性列表:
Master
3.23.33 and up Master
4.0.3 and up or any 4.1.x Master
5.0.0
Slave 3.23.33 and up yes no no
Slave 4.0.3 and up yes yes no
Slave 5.0.0 yes yes yes
1). 在Master Server上建立一個用於Slave Server同步數據庫用的帳號,這個帳號要被給予“REPLICATION SLAVE”權限,假設你的Slave Server所在的域爲Slave.com,同步用用戶名爲repl,密碼爲slavepass,用如下語句在Master Server上建立用戶並授權:
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.Slave.com' IDENTIFIED BY 'slavepass'; //這允許複製所有的數據庫,也可以單獨制定數據庫
2). 如果數據庫只是用了MyISAM表(從3.23.0開始,MyISAM就是MySQL數據表的默認格式了),用“FLUSH TABLES WITH READ LOCK;”語句刷新所有的表並禁止寫語句。不要退出你執行上述語句的客戶端,如果退出,語句執行就會結束。
3). 爲Master Server上的數據做一個快照,最簡單的辦法就是把數據目錄打成一個壓縮包。Linux下使用tar命令,Windows下可以使用WinRAR。如果只複製單個數據庫就只需打包那個數據庫目錄就可以了。將打包文件拷貝到Slave Server上,解壓縮到數據庫目錄,如果不想Slave Server上的mysql數據庫被覆蓋,將壓縮包裏面的mysql剔除再解壓縮到數據庫目錄。壓縮包解壓縮前不要包含任何日誌文件,或者master.info、relay-log.info。
4). 當“FLUSH TABLES WITH READ LOCK”生效後,在Master Server上執行“SHOW MASTER STATUS;”,“File”欄下記錄的是日誌的名字,“Position”欄記錄的是偏移量,記下日誌名字和偏移量,以後要用到。然後執行“UNLOCK TABLES;”,啓用寫語句。
如果你使用了InnoDB表,最好的方法是使用InnoDB Hot Backup工具,可以去http://www.innodb.com/manual.php查看具體信息。
如果沒有使用InnoDB Hot Backup工具,最快的製作InnoDB錶快照的方法就是關掉Master Server,拷貝InnoDB數據文件、日誌文件、表定義文件。在關閉Master Server之前,你需要記錄日誌文件名字和偏移量,使用下面的語句:
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
記錄完以後,直接關閉Server,不要運行“UNLOCK TABLES;”,以保證快照對應的日誌名字和偏移量沒有改變。
mysqladmin -u root shutdown //關閉Server
注:有一個可以同時應用於MyISAM和InnoDB表的方法——做Master的SQL dump。
在Master Server上執行“mysqldump --master-data”,然後在Slave Server上導入在Master Server上導出的數據文件,但是這種方法慢。
如果Master Server以前是以 “without --log-bin enabled”運行的,那麼通過“SHOW MASTER STATUS”查看的日誌文件和偏移量將是空的,mysqldump也會是空的。這樣,當一會要制定Slave的log file and position時,就使用空字符串“’’”和4。

5). 確保Master Server上的my.cnf文件中[mysqld]塊包括一個log-bin選項和server-id=master_id選項,並且master_id是一個位於1 to 232 – 1之間的正數。
[mysqld]
log-bin
server-id=1
如果沒有,添加並重啓Server
6). 關閉Slave Server上的MySQL,在my.cnf活my.ini中添加
[mysqld]
server-id=slave_id
slave_id也是一個位於1 to 232 – 1之間的正數,但是不能和master_id一樣。如果不止一臺Slave Server,則每一臺Slave Server的slave_id不能相同。
啓動Slave Server上的MySQL之前,確保從Master Server上備份的數據已經放到Slave Server上MySQL的數據庫目錄中。並確認權限設置正確。如果使用mysqldump備份的,先啓動Slave Server。
7). 啓動Slave Server上的MySQL。如果以前設置過複製,則使用--skip-slave-start選項,確保啓動後不立即連接Master Server。也可以使用--log-warnings選項,當出現問題時可以獲得更多的信息。
如果使用mysqldump備份數據的,導入數據:“mysql -u root -p < dump_file.sql”
8). 在Slave Server上執行下面的語句:

mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
替換選項中的值爲實際值。
下面是選項長度限制:

MASTER_HOST 60
MASTER_USER 16
MASTER_PASSWORD 32
MASTER_LOG_FILE 255


9). 啓動Slave線程:
mysql> START SLAVE;
至此,應該可以實現數據庫的複製了。
其他問題:
如果忘記設置Master Server的server-id的值,Slave Server就不能連接到Master Server
如果忘記設置Slave Server的server-id的值,你將得到下面的錯誤提示:
Warning: You should set server_id to a non-0 value if master_host is set; We force the server id to 2, but this MySQL server will not act as a slave.
如果出現其他原因導致不能同步,你可以在Slave的錯誤日誌裏看到錯誤提示。
當Slave Server開始複製數據庫時,你可以在data directory中發現master.info和relay-log.info,Slave通過這兩個文件來跟蹤Master的binary log。不要刪除和編輯這兩個文件,儘量使用“CHANGE MASTER TO”語句。
master.info會覆蓋一些在命令行制定的選型和在my.cnf中的選項。
當配置好一臺Slave Server後,可以使用同樣的方法配置其他的Slave Server,不需要重新備份Master Server的數據庫,使用同一個即可。
=======================

 

【來源】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章