MySQL主從能夠實現MySQL的讀寫分離,master上進行寫操做,同步數據庫,slave上進行讀操做,能夠極大的提高性能,下降服務器負載,下面來作主從配置詳解!html
環境:
centos 7 192.168.1.1 atlas代理服務
centos 7 192.168.1.2 主Mysql數據庫
centos 7 192.168.1.3 從Mysql數據庫mysql
1.三臺機器都安裝centos7
2.相互ping通,並關閉防火牆(測試)
3.主從服務器都安裝mysql 5.6git
2.先查看機器是否默認已安裝過mysql。
yum repolist all | grep mysql
若是有記得刪除再安裝。github
3.安裝mysql服務
yum install mysql-community-server -ysql
4.設置開機啓動並啓動服務
systemctl enable mysqld
systemctl start mysqld數據庫
1.首先進入主的mysql數據庫中,建立用戶saybot,密碼123456.
mysql> grant all on . to saybot@'%' identified by "123456";bootstrap
2.修改saybot的訪問權限
進入數據庫
use mysql;
修改權限%
update user set host = '%' where user = 'saybot';
查看權限是否成功。能夠看到,saybot的用戶,host已經修改爲百分號了。
select user, host from user;
更新數據庫信息。
flush privileges;vim
3.主從MySQL都須要建立一個數據庫,我這建立的數據庫是redmine
create database redmine;後端
【主意:主數據庫與從的數據庫一樣配置, 記得要建立一樣的數據庫哦】centos
配置主服務器的配置文件(新增以下配置。)
vi /etc/my.conf
#主從複製配置
innodb_flush_log_at_trx_commit=1
sync_binlog=1
#須要備份的數據庫
binlog-do-db=test
#不須要備份的數據庫
binlog-ignore-db=mysql
#啓動二進制文件
log-bin=mysql-bin
#服務器ID
server-id=1
【主意:若沒有配置binlog-do-db和binlog_ignore_db,表示備份所有數據庫。】
重啓服務
systemctl restart mysqld
進入數據庫配置主從複製的權限
grant replication slave on . to 'saybot'@'%' identified by '123456';
鎖定數據庫
flush tables with read lock;
查看主數據庫信息,記住下面的「File」與「Position」的信息,它們是用來配置從數據庫的關鍵信息。
show master status;
注意:在配置主從同步的時候會用到這個裏面的信息。
配置從服務器
1.修改配置添加以下
vi /etc/my.cnf
server-id=2
mysql> change master to master_host='192.168.1.1',
-> master_user='saybot',
-> master_password='123456',
-> master_port=3306,
-> master_log_file='mysql-bin.000002',
-> master_log_pos=328,
-> master_connect_retry=10;
Query OK, 0 rows affected (0.01 sec)
注意:file和log_pos是主mysql的信息。
啓動服務
start slave;
檢查主從複製狀態,要看到下列標紅的信息中,兩個都是Yes,才說明主從鏈接正確,若是有一個是No,須要從新肯定剛纔記錄的日誌信息,停掉「stop slave」從新進行配置主從鏈接。
show slave status \G;
注意:若是在配置主動數據庫同步的時候,主庫裏面有不少數據的話,須要從主庫裏面將數據導出,而後再倒入到從庫裏面。保持數據一致。
能夠參考以下數據庫導出和導入:
mysqldump -uroot -p111111 -R -E --triggers --single-transaction --master-data=2 --hex-blob --opt --databases xxxxxx >/tmp/xxxx.sql
mysql -uroot -p111111 </tmp/xxxx.sql
安裝依賴
yum update -y nss curl libcurl
yum group install "Development tools"
yum install gcc make libcurl-devel openssl-devel gmp-devel tar libffi-devel gettext-devel -y
yum install -y tcpdump net-tools jemalloc-devel libevent-devel glib2-devel lua-devel lua mysql-devel git
#yum install glib2
#yum install jemalloc
cd /opt && git clone https://github.com/Qihoo360/Atlas
cd Atlas
須要先修改源代碼
vim /opt/Atlas/src/network-conn-pool-lua.c
220行:char tmp[] = {to_write - 4, 0, 0, 1, 0x85這行代碼
將0x85修改爲0x87以後,保存退出
./bootstrap.sh
make clean
make && make install
配置項添加或變動這幾項:
daemon=true
event-threads=2
charset=utf8mb4
sql-log=ON
max_conn_for_a_backend=0
wait-timeout=60
編輯配置文件vi /usr/local/mysql-proxy/conf/config.cnf
[mysql-proxy]
admin-username=admin ###管理接口的用戶名
admin-password=admin123 ###管理接口的密碼
#admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua
log-level=debug ####日誌級別
log-path=./log #####日誌路徑
#plugin-dir=./lib
event-threads=2 ##工做線程數,對Atlas的性能有很大影響,可根據狀況適當設置
instance=config ####配置文件的名字
proxy-address=0.0.0.0:1234 #Atlas監聽的工做接口IP和端口
admin-address=0.0.0.0:2345 #Atlas監聽的管理接口IP和端口
####Atlas後端鏈接的MySQL主庫的IP和端口,可設置多項,用逗號分隔
proxy-backend-addresses=192.168.50.199:3306
###Atlas後端鏈接的MySQL從庫的IP和端口,@後面的數字表明權重,用來做負載均衡,若省略則默認爲1,可設置多項,用逗號分隔
proxy-read-only-backend-addresses=192.168.0.206:3306
###用戶名與其對應的加密過的MySQL密碼,密碼使用PREFIX/bin目錄下的加密程序encrypt加密,下行的user1和user2爲示例,將其替換爲你的MySQL的用戶名和加密密碼!
pwds=saybot:Ze2h****
daemon=true #####設置Atlas的運行方式,設爲true時爲守護進程方式,設爲false時爲前臺方式,通常開發調試時設爲false,線上運行時設爲true,true後面不能有空格
keepalive=true ####設置Atlas的運行方式,設爲true時Atlas會啓動兩個進程,一個爲monitor,一個爲worker,monitor在worker意外退出後會自動將其重啓,設爲false時只有worker,沒有monitor,通常開發調試時設爲false,線上運行時設爲true,true後面不能有空格。
charset=utf8mb4 ###默認字符集
sql-log=ON ###########日誌開關,
max_conn_for_a_backend=0
wait-timeout=60
配置完成後啓動服務
cd /usr/local/mysql-proxy/bin/ ####進入啓動文件目錄
./mysql-proxyd config start ####啓動服務
主從經過代理實現讀寫分離,在調用的時候能夠直接用代理的ip,並使用代理的端口1234便可。