主從複製目的:能夠作數據庫的實時備份,保證數據的完整性;可作讀寫分離,主服務器只管寫,從服務器只管讀,這樣能夠提高總體性能。 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
忽略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。