mysql主從庫配置讀寫分離以及備份

1,什麼是讀寫分離?
其實就是將數據庫分爲了主從庫,一個主庫用於寫數據,多個從庫完成讀數據的操做,
主從庫之間經過某種機制進行數據的同步,是一種常見的數據庫架構。
一個組從同步集羣,一般被稱爲是一個「分組」。mysql

2,數據庫分組架構解決什麼問題?算法

大多數互聯網業務,每每讀多寫少,這時候,數據庫的讀會首先稱爲數據庫的瓶頸,
這時,若是咱們但願可以線性的提高數據庫的讀性能,消除讀寫鎖衝突從而提高數據庫的寫性能,那
麼就可使用「分組架構」(讀寫分離架構)。
用一句話歸納,讀寫分離是用來解決數據庫的讀性能瓶頸的。sql


3,什麼是數據庫水平切分?
數據庫水平切分,也是一種常見的數據庫架構,是一種經過算法,將數據庫進行分割的架構。
一個水平切分集羣中的每一個數據庫,一般稱爲一個「分片」。
每個分片中的數據沒有重合,全部分片中的數據並集組成所有數據。數據庫

步驟一:搭建MySQL一主一從同步結構vim

1)配置主服務器192.168.4.51服務器

]# vim /etc/my.cnf
[mysqld]
server_id=51 //指定服務器ID號
log-bin=master51 //啓用binlog日誌,並指定文件名前綴
...
[root@master10 ~]# systemctl restart mysqld //重啓mysqld架構


2)主服務器受權用戶,並查看binlog日誌信息ide

]# mysql -uroot -p123456
mysql> grant all on *.* to 'repluser'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master51.000001 | 449 | | | |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)工具


3)配置從服務器192.168.4.52性能

]# vim /etc/my.cnf

[mysqld]

server_id=52 //指定服務器ID號,不要與Master的相同

:wq

]# systemctl restart mysqld


4)配置從服務器192.168.4.52,指定主服務器信息,日誌文件、偏移位置(參考MASTER上的狀態輸出)

]# mysql -uroot -p123456
mysql> change master to master_host='192.168.4.51',
-> master_user='repluser',
-> master_password='123456',
-> master_log_file='master51.000001',
-> master_log_pos=449;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.4.51
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master51.000001
Read_Master_Log_Pos: 738
Relay_Log_File: slave20-relay-bin.000002
Relay_Log_Pos: 319
Relay_Master_Log_File: master51.000001
Slave_IO_Running: Yes //IO線程YES
Slave_SQL_Running: Yes //SQL線程YES
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 738
Relay_Log_Space: 528
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 10
Master_UUID: 95ada2c2-bb24-11e8-abdb-525400131c0f
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)


5)測試配置,在主服務器本機建立數據庫 aa庫

]# mysql –uroot –p123456
mysql> create database aa;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| aa |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)


6)從服務器上查看,有aa庫

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| aa |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)

備份方式:
冷備份:拷貝數據庫目錄,須要先停機再備份,對於在線不間斷提供業務的不適用
邏輯備份: mysqldump工具,單線程備份,備份速度較慢;mydumper工具,mysqldump升級版,有限制條件

備份單個庫:
備份:mysqldump -uroot -p dbname1> 1.sql
還原:mysql -uroot -p dbname1 < 1.sql

備份多個庫:
備份:mysqldump -uroot -p --database db1 db2 > 1.sql
還原: mysql -uroot -p < 1.sql


備份所有庫:
備份:mysqldump -uroot -p --all-databases > 1.sql
還原:mysql -uroot -p < 1.sql

備份單個表:備份:mysqldump dbname1 tb1 > 1.sql還原: mysql -uroot -p dbname1 tb1 < 1.sql

相關文章
相關標籤/搜索