1. 程式人生 > >只為成功找方法-不為失敗找理由

只為成功找方法-不為失敗找理由

Mysql作為目前世界上使用最廣泛的免費資料庫,相信所有從事系統運維和web開發的工程師都一定接觸過。但在實際的生產環境中,由單臺Mysql作為獨立的資料庫是完全不能滿足實際需求的,無論是在安全性,高可用性以及高併發等各個方面。

因此,一般來說都是通過主從複製(Master-Slave)的方式來同步資料,再通過讀寫分離(MySQL-Proxy)來提升資料庫的併發負載能力這樣的方案來進行部署與實施的。

如下圖所示:mysql主從分離

2、mysql主從分離配置步驟

MySQL主從複製場景描述:主資料庫伺服器:192.168.10.133,MySQL已經安裝,並且無應用資料。從資料庫伺服器:192.168.10.

234,MySQL已經安裝,並且無應用資料。

2.1 主伺服器上進行的操作啟動mysql服務/opt/mysql/init.d/mysql start

通過命令列登入管理MySQL伺服器/opt/mysql/bin/mysql -uroot -p'new-password'

授權給從資料庫伺服器192.168.10.131mysql> GRANT ALL PRIVILEGES ON *.* TO 'hidden'@'192.168.1.234' IDENTIFIED BY '12345678';查詢主資料庫狀態Mysql> show master status;+------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000005 | 261      |               |                 |+------------------+----------+--------------+------------------+

記錄下 FILE 及 Position 的值,在後面進行從伺服器操作的時候需要用到。

2.2 配置從伺服器修改從伺服器的配置檔案/opt/mysql/etc/my.cnf

將 server-id = 1修改為 server-id = 10,並確保這個ID沒有被別的MySQL服務所使用。

啟動mysql服務/opt/mysql/init.d/mysql start

通過命令列登入管理MySQL伺服器/opt/mysql/bin/mysql -uroot -p'new-password'

執行同步SQL語句mysql> change master tomaster_host=’192.168.10.130’,master_user=’rep1’,master_password=’password’,master_log_file=’mysql-bin.000005’,master_log_pos=261;

正確執行後啟動Slave同步程序mysql> start slave;

主從同步檢查mysql> show slave status\G==============================================**************** 1. row *******************Slave_IO_State:Master_Host: 192.168.10.130Master_User: rep1Master_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000005Read_Master_Log_Pos: 415Relay_Log_File: localhost-relay-bin.000008Relay_Log_Pos: 561Relay_Master_Log_File: mysql-bin.000005Slave_IO_Running: YESSlave_SQL_Running: YESReplicate_Do_DB:……………省略若干……………Master_Server_Id: 11 row in set (0.01 sec)==============================================

其中Slave_IO_Running 與 Slave_SQL_Running 的值都必須為YES,才表明狀態正常。

如果主伺服器已經存在應用資料,則在進行主從複製時,需要做以下處理:(1)主資料庫進行鎖表操作,不讓資料再進行寫入動作mysql> FLUSH TABLES WITH READ LOCK;

(2)檢視主資料庫狀態mysql> show master status;

+------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000005 | 261 | | |+------------------+----------+--------------+------------------+

(3)記錄下 FILE 及 Position 的值。將主伺服器的資料檔案(整個/opt/mysql/data目錄)複製到從伺服器,建議通過tar歸檔壓縮後再傳到從伺服器解壓。

(4)取消主資料庫鎖定mysql> UNLOCK TABLES;

2.3 驗證主從複製效果

主伺服器上的操作在主伺服器上建立資料庫first_dbmysql> create database first_db;Query Ok, 1 row affected (0.01 sec)

在主伺服器上建立表first_tbmysql> create table first_tb(id int(3),name char(10));Query Ok, 1 row affected (0.00 sec)

在主伺服器上的表first_tb中插入記錄mysql> insert into first_tb values (001,’myself’);Query Ok, 1 row affected (0.00 sec)

在從伺服器上檢視mysql> show databases;=============================+--------------------+| Database |+--------------------+| information_schema || first_db || mysql || performance_schema || test |+--------------------+5 rows in set (0.01 sec)=============================資料庫first_db已經自動生成

mysql> use first_dbDatabase chaged

mysql> show tables;=============================+--------------------+| Tables_in_first_db |+--------------------+| first_tb |+--------------------+1 row in set (0.02 sec)=============================資料庫表first_tb也已經自動建立

mysql> select * from first_tb;=============================+------+------+| id | name |+------+------+| 1 | myself |+------+------+1 rows in set (0.00 sec)=============================記錄也已經存在

由此,整個MySQL主從複製的過程就完成了,接下來,我們進行MySQL讀寫分離的安裝與配置。