LINUX 下MySQL主從復制與分區技術以及bin-log日志


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)
);

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM