mysql5.5主從複製

個人操做系統:rhel6,定製安裝時選擇base system爲默認。developmet 選擇的development-tools全部可選包。mysql

安裝mysql5.5要求安裝ncurses-devel包。個人系統沒有裝,從光盤yum安裝或者rpm安裝。sql

oracle新釋出5.5版本要用cmake來編譯源碼包。因此還要安裝cmake。我下載的cmake2.8,因而卸載了原系統的cmake2.6。數據庫

編譯時進入解壓後的mysql目錄,查看一下INSTALL-SOURCE文件,裏面介紹了各類操做系統平臺mysql的安裝方法。不過我大略看了一下好像是沒寫怎麼定製安裝。這時咱們能夠打開同目錄下的BUILD-CMAKE文件,裏面介紹瞭如何使用cmake來configuration parameters。因而咱們能夠在當前目錄下輸入cmake -L;要查看帶簡短解釋的編譯屬性用cmake -LH;再全一點能夠用cmake -LAH。bash

這裏我把安裝cmake和mysql的過程寫入了一個腳本:架構

#! /bin/bash
cmakever=cmake-2.8.3
mysqlver=mysql-5.5.12
mysql_home=/usr/local/mysql
########################
groupadd mysql
useradd -g mysql -s /sbin/nologin mysql
mkdir /opt/data
chown -R mysql.mysql /opt/data
mkdir /usr/local/mysql
tar zxvf $cmakever.tar.gz
cd $cmakever
./configure;make;make install
cd -
tar zxvf $mysqlver.tar.gz
cd $mysqlver
cmake . -DCMAKE_INSTALL_PREFIX=$mysql_home \
oracle

-DINSTALL_DATADIR=/opt/data -DDEFAULT_CHARSET=utf8 \ide

-DEXTAR_CHARSETS=all -DENABLED_LOCAL_INFILE=1 \性能

-DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_E \
MBEDDED_SERVER=1

make;make install
cp -f $mysql_home/support-files/my-medium.cnf /etc/my.cnf
sed -e '/\[client\]/a\default_character_set=utf8' -e '/\[mysqld\]/a\character_set_server=utf8\n\datadir=/opt/data'
/etc/my.cnf > /etc/my.cnf.new
mv /etc/my.cnf /etc/my.cnf.old
mv /etc/my.cnf.new /etc/my.cnf
$mysql_home/scripts/mysql_install_db --datadir=/opt/data --basedir=$mysql_home  \
測試

--user=mysql > /dev/null 2>&1
#./bin/mysqld_safe --user=mysql & > /dev/null  2>&1
cp -f $mysql_home/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add /etc/init.d/mysqld
chkconfig --level 35 mysqld on
echo "export PATH=$PATH:$mysql_home/bin" >> /etc/profile
source /etc/profile
service mysqld start
編碼

注:兩個標紅的地方都是一行,其中第一個是我定製的編譯選項,第二個是用sed在my.cnf中加入字符編碼和數據目錄。由於我在安裝時自定義了數據目錄。若是不編輯默認的配置文件老是在mysql_install_db那一步就出錯。

====================================

下面該配置主從複製了,但我看之前的一些文檔甚至」原裝「的my.cnf,須要在從機的配置文件中聲明主機的IP,端口,賦予權限的用戶,密碼等信息,但新版本的好像並不支持這些選項了。好比我打開master-host="主機IP",重啓mysql時錯誤日誌提示不認識這個選項。

乾脆省事不開這些選項了,也不影響正常功能。

個人  主機:192.168.0.30

         從機:192.168.0.40

主機操做:

(1)能夠編輯my.cnf自定義二進制日誌的位置等信息。我沒有改動任何選項,只是保證二進制日誌選項是打開的。

(2)登入mysql創建一個用戶,並賦予replication slave權限:

mysql>grant replication slave on *.* to slaveuser@192.168.0.40 identified by '123456' ;

mysql>flush privileges;

mysql>show master status;

記錄下二進制日誌文件名和位置,以下:

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000007 |      295 |              |                  |
+------------------+----------+--------------+-------------------+

從機操做:

(1)編輯my.cnf,把server-id改爲不和主機相同的數字。若是隻想同步指定的數據庫,能夠添加  replicate-do-db = yourdatabase,同步幾個就複製幾個,把數據庫名改了就好。

(2)登入mysql,輸入一下命令:

mysql>change master to master_host='192.168.0.30',master_user='slaveuser',master_password='123456', 

master_log_file='mysql-bin.000007',master_log_pos=295;

mysql>start slave;

mysql>show slave status\G;

若是出現: Slave_IO_Running: Yes
               Slave_SQL_Running: Yes

以上兩項都爲Yes,那說明沒問題了。若是指定了個別的數據庫,還能夠看到:

Replicate_Do_DB: yourdatabase。很明白的看到是同步了哪幾個數據庫。

注:(1)若是出現Slave_SQL_Running:connecting的現象,首先在從機命令行下輸入:

#mysql -uslaveuser -h 192.168.0.30 -p123456

看是否能登入mysql,若是是拒絕等提示,那要查看主機上的第(2)操做是否用戶的權限等設置正確。

     (2)若是開始的環境不是主從架構,跑了一段時間已經有了數據,這時候要先在主機上加鎖:flush tables with read lock;

打包主機的數據目錄: #tar zcf  /tmpdatabak.tgz /opt/data,拷貝這個壓縮包到從機,解壓後,作主從的配置。

而後解鎖:unlock tables;

==============================================

主從機制主要實現了數據庫讀操做的負載,能夠設置多歷來分擔主的讀操做。寫仍是要在主上進行,不要在從庫上作增刪改的操做,像我開始同樣菜就麻煩了,刪除了從庫數據但主庫不會再同步了。即便是設置了互爲主從,爲避免數據衝突,寫仍是要由其中一臺主來完成。爲了實現高效的數據庫性能,咱們能夠作成讀寫分離。之後我測試完貼出來。也但願有實際應用的朋友們給我借鑑一下經驗!

切記:從庫的做用就是讀負載,以及備份的做用。固然真正的備份也仍是要在主庫上來作的。若是主庫掛掉了,能夠嘗試把其中一臺從庫切換成主庫。操做就是先而後中止slave;加鎖;接下來按照以上操做就能夠了。

相關文章
相關標籤/搜索