MYSQL的主從復制和分區技術主要是解決服務器負載均衡的策略。
這個技術所涉及到的技術點
1.MySQL用戶授權
2.MySQL bin-log日志
3.MySQL主從復制
4.MySQL分區技術
在測試中 主服務器ip為 192.168.10.1 從服務器ip為 192.168.10.111
一、MySQL用戶授權
登錄mysql的test數據庫 mysql -uroot -p123 test 如果我們要做主從復制 那么 我們就需要在主服務器上給從服務器授權,下面我們在主服務器上給從服務器授權一個用戶,讓從服務器能用此用戶來訪問我們的主服務器的數據庫。 授權用戶 grant all on *.* to user1@192.168.10.111 identified by "123";【授權服務器地址為192.168.10.111,用戶名為user1密碼為123的用戶能夠訪問主服務器】 grant all on *.* to user1 identified by "123";【給全部主機授權】
我們查看一下主服務器的用戶 select user,host,password from mysql.user;
發現用戶表中 多了一個user1的用戶 那么主機地址為192.168.10.111
那么我們測試一下 我們在從服務器上用user1看能不能登錄主服務器
mysql -uuser1 -p123 -h192.168.10.1
測試發現成功!
二、 bin-log日志
首先我們要開啟mysql的binlog日志 編輯/etc/my.cnf文件 在[mysqld]中加入下列代碼 log-slow-queries = mysql-slow.log log-error = mysql.err log = mysql.log log-bin = mysql-bin
#binlog日志的文件是存放在data目錄中所以 要在此設置一下datadir這個屬性
datadir = /usr/local/mysql/data
登錄mysql mysql -uroot -p123 test; 用到的代碼指令: flush logs; 【生成一個最新的bin-log日志】 show master status; 【查看最后一個bin-log日志】 reset master; 【清空所有bin-log日志】 /usr/local/mysql/bin/mysqlbinlog mysql-bin.000001【查看bin-log日志 前提是你當前所在目錄為/usr/local/mysql/data】 /usr/local/mysql/bin/mysqlbinlog mysql-bin.000001 | mysql -uroot -p123 test【把mysql-bin.000001的日志的記錄恢復到test數據庫】 /usr/local/mysql/mysqlbinlog --start-position="50" --stop-position="100" mysql-bin.000001 | mysql -uroot -p123 test【把mysql-bin.000001的50-100行的記錄恢復到test數據庫,除此之外還可以有--stop-date=""】 mysqldump -uroot -p123 test -l -F > /tmp/test.sql【備份test數據庫到test.sql文件里 -l 代表讀鎖 -F代表flush logs】 mysql -uroot -p123 test -v -f < /tmp/test.sql【從test.sql恢復數據記錄-v 代表查看導入信息 -f代表忽略錯誤】
三、mysql主從復制
主ip:192.168.10.1 從ip:192.168.10.111 1.主服務器進行用戶授權 grant all on *.* to user1@192.168.10.111 identified by "123" 2.修改主服務器my.cnf並設置server-id的值 找到[mysqld] 修改server-id=1 3.(可選)在從服務器上設置讀鎖定有效,確保沒有數據庫插入或者修改操作 flush tables with read lock; 備份數據庫 unlock tables; 解鎖 4.修改從服務器my.cnf 並設置server-id 找到[mysqld]修改server-id=2 【mysql5.5貌似不支持my.cnf中master-host之類配置主從服務器關聯】 可以這么做:登錄mysql執行主從設置 change master to master_host='192.168.10.1',master_user='user1',master_password='123'; 啟動主從復制功能 slave start; 查看主從信息 show slave status\G; 如果打印的信息中slave_IO_Running:yes和Slave_SQL_Runnning:yes 則表示配置成功
四、MySQL分區技術
mysql分區技術是mysql5.1以后出現的新技術,能替代分庫分表技術,它的優勢在於只在物理層面來降低數據庫壓力,無需更改php的代碼。
常用的MySQL分區類型:
1.RANGE分區:基於屬於一個給定的連續區間的列值,把多行分配給分區(基於列)。
2.LIST分區:類似於按RANGE分區,區別在於LIST分區是基於列值匹配一個離散值集合的某個值來進行選擇(基於列值是固定值的)。
3.HASH分區:基於用戶自定義的表達式的返回值來進行分區選擇,該表達式使用將要插入列表中的這些行的列值進行計算,這個函數可以包含mysql中有效的產生非負整數值的任何表達式。
4.KEY分區:類似於HASH分區,卻別在於KEY分區只支持計算一列或者多列,且mysql服務器提供其自身的哈希函數。
日常中用的比較多的就是RANGE,LIST分區
實例:
CREATE TABLE TEST{ store_id INT NOT NULL } PARTITION BY RANGE(store_id)( PARTITION p0 VALUES LESS THAN(6),
PARTITION p1 VALUES LESS THAN(11) );
以上意思是 當store_id值小於6就會分配到p0分區 小於11則是p1分區
CREATE TABLE TEST{ store_id INT NOT NULL } PARTITION BY LIST(store_id)( PARTITION p0 VALUES IN (1,2,3) , PARTITION p1 VALUES IN (4,5,6) );