mysql數據庫遷移主從複製(分享十三)

       本章節聊聊MySQL主從複製部署,爲何聊這個話題,也是由於我負責的整個江蘇省的雲上遷移項目的緣由,一開始我認爲咱們電信天翼雲針對的政府企業是數據量小,停機時間長的一個遷移項目,通過13個地市調查瞭解到不少政府企業的web服務等應用已經上了TB級別的量級,這個其實還不是重點,不少雲主機申請的帶寬只有1M-5M等不一樣,按照我原先計劃的冷備份導出或者備份與恢復方式都沒有辦法知足這些甲方需求,因而我就想到了主從模式,這樣停機時間短,切換時間快,數據庫這種主從方案都很成熟。這也是我前面寫了不少遷移方式,大部分針對的是數據量不大,停機時間長的模式。今天我就對mysql主從模式聊聊部署方式:

主從複製目的:能夠作數據庫的實時備份,保證數據的完整性;可作讀寫分離,主服務器只管寫,從服務器只管讀,這樣能夠提高總體性能。 node

1.安裝部署mysql 5.5(rpm、源碼) mysql

軟件下載: web

http://dev.mysql.com/downloads/mysql/#downloads sql

檢查庫文件是否存在,若有刪除。
[root@localhost Desktop]$ rpm -qa | grep mysql
mysql-libs-5.1.52-1.el6_0.1.x86_64 數據庫

[root@localhost ~]# rpm -e mysql-libs-5.1.52.x86_64 –nodeps vim

命令以下:
#rpm -ivh MySQL-server-5.5.30-1.el6.x86_64.rpm
#rpm -ivh MySQL-client-5.5.30-1.el6.x86_64.rpm
#rpm -ivh MySQL-devel-5.5.30-1.el6.x86_64.rpm 服務器

/usr/bin/mysql_install_db --user=mysql 初始表 ide

#service mysql start性能

更改配置文件:orm

主 [root@server ~]# egrep "log-bin|server-id" /etc/my.cnf
server-id = 111
log-bin-index=mysql-bin.index

 

從 [root@server ~]# egrep "log-bin|server-id" /etc/my.cnf
log-bin=mysql-bin
server-id=222

#show variables like 'log_bin
+-----------------------+--------+
| Variable_name | Value |
+-----------------------+--------+
| log_bin       | ON  |    # ON 爲開始開啓成功
+-----------------------+--------+

3.創建用於從庫複製的帳號rep

mysql> grant replication slave on *.* to 'rep'@'192.168.0.%' identified by 'C#ssw0rd';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

# 檢查建立的rep帳號:
mysql> select user,host from mysql.user;
四、備份主庫,及恢復到從庫

把主庫現有數據備份下來,再恢復到從庫,此時兩個主機的數據一致。

若是事先有數據的話,這不不能忘。

在主庫上加鎖,使只有只讀權限。
mysql> flush table with read lock;
 記住就是這個點備份的。

show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000006 |      750 | wuzy         |    

主  mysqldump -uroot -p -hlocalhost --all-databases> mysql1.bak.sql 導出 或者若是數據量比較大,直接拷貝原始數據文件比使用mysqldump更加有效,也省去了執行insert語句更新索引的開銷。

 

解鎖庫:
mysql> unlock tables;

從   mysql -uroot -p </tmp/mysql1.bak.sql   導入

 
五、配置從庫及生效
 更改從屬服務器用於與主服務器進行鏈接和通信的參數。
mysql> CHANGE MASTER TO
      MASTER_HOST='192.168.0.203',
      MASTER_PORT=3306,
      MASTER_USER='rep',
      MASTER_PASSWORD='C#ssw0rd',
      MASTER_LOG_FILE='mysql-bin.000006',
      MASTER_LOG_POS=750;

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Connecting to master
                  Master_Host: 192.168.0.203
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000005
          Read_Master_Log_Pos: 948
               Relay_Log_File: server-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000005
             Slave_IO_Running: Connecting
            Slave_SQL_Running: Yes

6.讀寫分離

 

忽略MySQL主從複製受權表同步,讀寫分離

[root@bogon 3306]# vim my.cnf
#添加如下四行
replicate-ignore-db = mysql
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
binlog-ignore-db = information_schema

1)    經過read-only參數防止數據寫入從庫的方法。
#修改配置文件。
vim my.cnf
[mysqld]
read-only
#對用戶受權事不能指定有super或all privileges權限。否則沒效果。
#建立帳戶wuzy,並刷新權限。
mysql> grant select,insert,update,delete on *.* to 'wuzy'@'localhost' identified by 'P!ssw0rd';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

2)    從庫開啓bin-log
vim my.cnf
log-bin = mysql-bin
log-slave-updates           #表示從庫記錄bin-log
expire_logs_days = 7        #保留7天bin-log。
相關文章
相關標籤/搜索