一、MYSQL 主從復制
主從復制作用:
(1)處理數據庫的物理損壞
(2)架構演變的基礎(高可用,讀寫分離,分布式等)
1、主從復制搭建前提
(1)至少兩臺以上的mysql實例,(并定義主從,不同的server_id,主庫開啟二進制日志)
(2)主庫需要開啟專門的復制用戶
(3)從庫提前進行數據補償
(4)告知從庫,主庫的:ip port,user,passwd 復制的起點(change master to)
2、搭建主從復制
2.1、準備兩個數據庫節點(我準備了 db01,db02兩個節點)
保證主庫的server_id 小于從庫
保證數據庫開啟二進制日志
2.2 在主庫創建復制用戶(權限:replication slave)
[root@db01 ~]# mysql -uroot -p123456 -e "grant replication slave on . to repl@'10.0.0.%' identified by '123456';"
2.3備份主庫數據恢復到從庫:
[root@db01 ~]# mysqldump -uroot -p123456 -A -E -R --triggers --master-data=2 --single-transaction >/tmp/date +%F
.sql 2>/dev/null
[root@db01 /tmp]# scp 2019-09-02.sql 10.0.0.52:/tmp
[root@db02 /tmp]# mysql -uroot -p123456 </tmp/2019-09-02.sql
2.4在從庫指明主庫的ip port,user,passwd 復制的起點(change master to)
在恢復到從庫的數據日志中找到位置點: CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000015', MASTER_LOG_POS=154;
help change master to
CHANGE MASTER TO
MASTER_HOST='master2.example.com',
MASTER_USER='replication',
MASTER_PASSWORD='password',
MASTER_PORT=3306,
MASTER_LOG_FILE='master2-bin.001',
MASTER_LOG_POS=4,
MASTER_CONNECT_RETRY=10;
在從庫下執行:
[root@db02 /tmp]# mysql -uroot -p123456
mysql> CHANGE MASTER TO
-> MASTER_HOST='10.0.0.51',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='123456',
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='mysql-bin.000015',
-> MASTER_LOG_POS=154,
-> MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected, 2 warnings (0.39 sec)
2.5在從庫啟動復制的專用線程
[root@db02 /tmp]# mysql -uroot -p123456 -e "start slave;"
2.6 判斷主從復制是否成功
[root@db02 /tmp]# mysql -uroot -p123456 -e "show slave status\G" |grep Running
排錯:
遇見此情況不要慌亂,首先查看日志,看看是什么報錯
[root@db02 /tmp]# mysql -uroot -p123456 -e "show slave status\G" |grep Running
mysql: [Warning] Using a password on the command line interface can be insecure.
Slave_IO_Running: No
Slave_SQL_Running: Yes
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
mysql主從配置uuid相同錯誤解決
配置mysql主從時,由于是拷貝的mysql目錄,導致主從mysql uuid相同, Slave_IO無法啟動,報錯信息如下:
The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
解決辦法:修改mysql data 目錄下auto.cnf 文件中uuid的值,使兩臺mysql不同即可,修改后重啟mysql服務。
3、主從復制原理
3.1主從復制涉及到的文件
主庫
二進制日志
從庫
relaylog :存放主庫發送的二進制日志
master.info :存放主庫的信息
relaylog.info :relaylog 信息,記錄了已經執行(回放)的relaylog的位置點
3.2 涉及到的線程
主庫
使用mysql> show processlist;查看
Binlog Dump thread
從庫
IO線程 Slave_IO_Running: Yes
SQL線程 Slave_SQL_Running: Yes
4、主從復制監控
(1) 主庫相關信息(master.info)
Master_Host: 10.0.0.51
Master_User: repl
Master_Port: 3306
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 154
(2) 從庫中繼日志信息(relay.info)
Relay_Log_File: db01-relay-bin.000005
Relay_Log_Pos: 367
Relay_Master_Log_File: mysql-bin.000004
Exec_Master_Log_Pos: 154
(3) 從庫的線程狀態,異常信息
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
(4) 過濾復制相關信息
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
(5) 主從延時的判定(落后于主庫的時間)
Seconds_Behind_Master: 0
(6) 延時從庫(主動延遲)
SQL_Delay: 0
SQL_Remaining_Delay: NULL
(7) GTID復制信息
Retrieved_Gtid_Set:
Executed_Gtid_Set:
5、主從故障
5.1 如何監控
mysql -uroot -p123456 -e "show slave status \G" |egrep " Last|Running"
5.2 原因
5.2.1 IO 故障
(1) 連接主庫
ip port user passwd
網絡
主庫宕機
防火墻
主庫連接數上限
[root@db01 ~]# mysql -urepl -p123 -h 10.0.0.58 -P 3307
(2) 請求日志
主庫二進制日志
如果是二進制日志無法同步按照一下方法執行即可。
stop slave;
reset slave all;
mysql -S /data/3308/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='10.0.0.51',MASTER_USER='repl',MASTER_PASSWORD='123',MASTER_PORT=3307,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;"
start slave
(3) 接收日志
I/O 線程down掉,一般時有人stop slave; 重啟即可 。
(4) 寫入日志
主庫或從庫的relaylog 文件損壞
解決方法1:最穩妥的做法是重新做主從.
如果數據量大可以使用第2種方法:pt-table-checksum校驗、pt-table-sync修復數據
5.2.2 SQL 故障
回放relaylog
(1) relaylog損壞
(2) 回放語句失敗(執行SQL為什么會失敗)
一般是因為主從庫數據不一致,一般有一下幾個方面的問題:
創建的對象已存在
修改的對象不存在
約束性的沖突
5.3 傳統主從復制的一些缺點
人為的寫入 --解決辦法--只讀從庫,中間件
只讀庫設置方法:在配置文件添加以下兩個參數改為on 即可。
read_only=on #控制普通用戶只讀
super_read_only=on #控制超級管理員只讀。
mysql> show variables like '%read_only%';
| Variable_name | Value |
+-----------------------+-------+
| read_only | OFF |
| super_read_only | OFF |
+-----------------------+-------+
主從本身就是有可能出現數據不一致--解決方案--半同步,增強半同步,無損復制. MGR PXC MGC
5.4 主從修復的方法
5.4.1
pt-table-checksum校驗
pt-table-sync修復數據
5.4.2
重新構建主從
++++++++++++++++++++++++++++++++++++++++++++++
6、主從延遲
6.1 主庫:
(1) 二進制日志書寫不及時--解決辦法--sync_binlog=1
sync_binlog=1 #值為1時,表示每次事務提交后立即寫入磁盤
(2) dump線程串行--解決辦法--GTID
6.2 從庫 :
(1)SQL 串行的問題--解決辦法--MySQL 5.7版本 GTID 邏輯時鐘 Logical_clock
(2) 大事務--解決辦法--將一個大事務化成多個小事務執行,執行多次
6.3 定位到SQL延時的位置點。
Relay_Log_File: db01--bin.000005
Relay_Log_Pos: 367
Relay_Master_Log_File: mysql-bin.000004
Exec_Master_Log_Pos: 154
7、延時從庫
其實時在從庫的SQL線程上控制執行時間
7.1 延時從庫配置(在從庫執行一下操作)
mysql>stop slave;
mysql>CHANGE MASTER TO MASTER_DELAY=300;
mysql>start slave;
mysql> show slave status \G
SQL_Delay: 300
SQL_Remaining_Delay: NULL
7.2 延時從庫演練
場景 db01(主) db02(延時從庫)
大型互聯網公司,數據量10T左右
每周全備,其他時間備份日志,1主多從,有延時從庫3小時
故障場景: 核心業務庫被惡意損壞 (drop database)
恢復思路:
1. 停從庫SQL線程 stop slave sql_thread;
2. 掛維護頁
3. 截取從庫的relaylog
起點: sql線程停止時的relay位置點
Relay_Log_File: db01-relay-bin.000004
Relay_Log_Pos: 367
終點: drop
恢復操作
第一步:模擬主庫數據及刪除操作
create database relay charset utf8;
use relay
create table t1 (id int);
insert into t1 values(1);
drop database relay;
第二步:停止從庫SQL線程
mysql>stop slave sql_thread;
第三步:找relaylog的起點和終點并截取日志
起點:
Relay_Log_File: db01-relay-bin.000002
Relay_Log_Pos: 320
Relay_Log_File: db02-relay-bin.000006
Relay_Log_Pos: 367
終點:
mysql>show relaylog events in 'db02-relay-bin.000006';
| db02-relay-bin.000006 | 1027 | Query | 1 | 909 | drop database relay |
[root@db02 /tmp]# mysqlbinlog --start-position=367 --stop-position=1027 /data/mysql/data/db02-relay-bin.000006> /tmp/relay.sql
第四步:從庫恢復relaylog
mysql>source /tmp/relay.sql
第五步:從庫身份解除
mysql>stop slave;
mysql>reset slave all
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
8、過濾復制
在從庫的SQL線程上作過濾回放
8.1 主庫方面
Binlog_Ignore_DB #黑名單,不記錄 那個庫的
Binlog_Do_DB #白名單,記錄那個庫的
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 | 1209 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
8.2 從庫方面
將以下參數選擇加入配置文件,重啟mysql 即可。
replicate_do_db=庫名 #記錄那個庫
replicate_ignore_db=庫名 #忽略那個庫
replicate_do_table=庫名.表名 #記錄那個表
replicate_ignore_table=庫名.表名 #忽略那個表
查看:
mysql>show slave status\G
Replicate_Do_DB: test1
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
9、GTID 復制
介紹:GTID(Global Transaction ID)是對于一個已提交事務的唯一編號,并且是一個全局(主從復制)唯一的編號。
它的官方定義如下:
GTID = server_uuid :transaction_id #保存在auto.cnf 文件中
7E11FA47-31CA-19E1-9E56-C43AA21293967:1-10
什么是sever_uuid,和Server-id 區別?
核心特性: 全局唯一,具備冪等性
9.1 GTID核心參數(編寫進配置文件中即可)
gtid-mode=on #啟用gtid模式,否則就是普通的復制架構
enforce-gtid-consistency=true #強制GTID的一致性
log-slave-updates=1 #slave更新是否記入日志
9.2 執行change master to 時不用指定position號,自動查找即可。
change master to
master_host='10.0.0.52',
master_user='repl',
master_password='123456' ,
MASTER_AUTO_POSITION=1;
start slave;
9.3 搭建GTID主從復制
背景 :一個主庫,兩個從庫(沒有原始數據的庫不用執行一下操作)
第一步:清空源數據目錄數據信息和配置文件(三個庫)
/etc/init.d/mysqld stop
rm -rf /data/mysql/*
rm -rf /data/mysql/*
rm -rf /etc/my.cnf
第二步:初始化數據(三個庫)
mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
第三步:編寫配置文件(server_id 不能相同)
cat >/etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/application/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
log_error=/data/mysql/error.log
server_id=3
port=3306
log_bin=/data/mysql/mysql-bin
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
socket=/tmp/mysql.sock
EOF
第四步:創建錯誤日志文件授權并重啟(三個庫都執行)
touch /data/mysql/error.log
chown -R mysql.mysql /data/
/etc/init.d/mysqld start
第五步:主庫添加授權目錄(僅主庫執行)
mysql -e "grant replication slave on *.* to repl@'10.0.0.%' identified by '123456';"
第六步:執行從庫配置(兩個從庫)
change master to
master_host='10.0.0.51',
master_user='repl',
master_password='123456' ,
MASTER_AUTO_POSITION=1;
start slave;
show slave status\G
9.4 查看GTID
主庫
mysql> show master status;
+------------------+----------+--------------+------------------+----------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+----------------------------------------+
| mysql-bin.000001 | 444 | | | d30a33a0-d086-11e9-8bc0-000c291fc150:1 |
+------------------+----------+--------------+------------------+----------------------------------------+
1 row in set (0.00 sec)
從庫
mysql> show slave status\G
Retrieved_Gtid_Set: d30a33a0-d086-11e9-8bc0-000c291fc150:1
Executed_Gtid_Set: d30a33a0-d086-11e9-8bc0-000c291fc150:1
二、 MHA 高可用
介紹:MHA初始版本必須有3個數據庫節點(一主兩從,數據庫節點必須是三臺獨立的主機),還必須有一個manager 端,來管理3個獨立的物理節點的數據庫,三個數據庫節點,都叫做node節點,管理主機叫做manager,
簡單來說,要想完成一個MHA的高可用,并且各節點都是互相獨立的主機,那么就需要 1主+2從+1manager=4臺主機,
MHA 軟件結構
Manager工具包主要包括以下幾個工具:
masterha_manger 啟動MHA
masterha_check_ssh 檢查MHA的SSH配置狀況
masterha_check_repl 檢查MySQL復制狀況
masterha_master_monitor 檢測master是否宕機
masterha_check_status 檢測當前MHA運行狀態
masterha_master_switch 控制故障轉移(自動或者手動)
masterha_conf_host 添加或刪除配置的server信息
Node工具包主要包括以下幾個工具:
這些工具通常由MHA Manager的腳本觸發,無需人為操作。
save_binary_logs 保存和復制master的二進制日志
apply_diff_relay_logs 識別差異的中繼日志事件并將其差異的事件應用于其他的
purge_relay_logs 清除中繼日志(不會阻塞SQL線程)
1、 MHA 搭建過程:
第一步:配置各節點互信(四個節點互信)
[root@db03 ~]# ssh-keygen -t rsa
[root@m01 /server/scripts]# cat ssh_fenfa.sh
#!/bin/bash
for ip in {51,52,53}
do
echo "=====Issued pub_key with 172.16.1.$ip====="
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.$ip -o StrictHostKeyChecking=no &>/dev/null
if [ $? -eq 0 ]
then
echo "公鑰信息分發成功 [ok]"
echo ""
else
echo "公鑰信息分發失敗 [failed]"
echo ""
fi
done
[root@m01 /server/scripts]#
驗證:
ssh 10.0.0.51 hostname
ssh 10.0.0.52 hostname
ssh 10.0.0.61 hostname
第二步:創建軟件調用時需要用到的軟連接(三個數據節點都要做)
ln -s /application/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
ln -s /application/mysql/bin/mysql /usr/bin/mysql
第三步:上傳安裝MHA軟件并安裝依賴包(所有節點)
yum install perl-DBD-MySQL -y
yum install -y mha4mysql-node-0.56-0.el6.noarch.rpm
第四步驟:manager節點安裝
yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
yum install -y mha4mysql-manager-0.56-0.el6.noarch.rpm
10.3配置和啟動
(1) 主庫創建管理用戶
db01:
mysql -e "grant all privileges on . to mha@'10.0.0.%' identified by 'mha';"
(2) 主備配置文件(manager節點)
mkdir -p /etc/mha
mkdir -p /var/log/mha/app1
cat > /etc/mha/mng.cnf <<EOF
[server default]
manager_log=/var/log/mha/app1/manager
manager_workdir=/var/log/mha/app1
master_binlog_dir=/data/binlog
user=mha
password=mha
ping_interval=2
repl_password=123456
repl_user=repl
ssh_user=root
[server1]
hostname=10.0.0.51
port=3306
[server2]
hostname=10.0.0.52
port=3306
candidate_master=1
check_repl_delay=0
[server3]
hostname=10.0.0.53
port=3306
EOF
(3) 啟動前檢查
[root@m01 /]# masterha_check_ssh --conf=/etc/mha/mng.cnf
[root@m01 /]# masterha_check_repl --conf=/etc/mha/mng.cnf
(4) 啟動MHA的manager進程
nohup masterha_manager --conf=/etc/mha/mng.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null> /var/log/mha/app1/manager.log 2>&1 &
[root@m01 /]# masterha_check_status --conf=/etc/mha/mng.cnf#查看啟動狀態
(5) 主庫宕機測試
/etc/init.d/mysqld stop
(6) 恢復MHA
注意:在MHA的環境下,主庫一旦宕機,主從關系就會發生變化,想要恢復宕機的主庫,需要重新建立主從關系
使用change master to 在down機節點上重新構建主從關系,因為是GTID復制,所以可以不用找Position號
change master to
master_host='10.0.0.52',
master_user='repl',
master_password='123456' ,
MASTER_AUTO_POSITION=1;
start slave;
show slave status\G
回到manager 節點配置文件中重新添加消失的主機節點,然后重啟manager進程即可恢復,恢復后注意監測
2、MHA工作原理
2.1 主庫宕機后,從庫選主問題
(1) 當主庫宕機后,MHA會根據配置文件內的權重進行選主(最優先);candidate_master=1
如果被選主,和宕機主庫的日志數量相差超過100M時,也不會進行自動選主,加上check_repl_delay=0參數,強制選主。
(2) 當主庫宕機后,如果配置文件內沒有設置權重,會根據兩個從庫的日志量級進行選主(次之)根據日志量(position或者GTID)
(3) 當主庫宕機后,MHA配置文件內沒有設置權重,同時兩個從庫的數據量級相同,接根據配置文件的書寫順序進行選主(最后)
2.2 數據補償
(1) 主庫SSH能連,會在選主之前,立即在各個節點保存(save_binary_logs) 缺失部分日志到/var/tmp
(2) SSH不能連,通過apply_diff_relay_logs,計算兩個從節點的relaylog差異,進行補償
11.3 當主庫故障后,MHA自動選主發生的事件(不需要人工干預)
(1)被選主庫:清理自身的從庫關系
stop slave;
reset slave all;
(2)所有從庫和新主庫確認新的主從關系
change master to
start slave
2.3 應用透明(VIP)
(1) 腳本準備
[root@m01 /server/tools]# chmod +x master_ip_failover.txt
[root@m01 /server/tools]# dos2unix master_ip_failover dos2unix master_ip_failover
[root@m01 /server/tools]# cp master_ip_failover.txt /usr/local/bin/master_ip_failover
修改文件內容:
my key = '1';
my key
ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
(2) 修改MHA配置文件
添加腳本的完整路徑
master_ip_failover_script=/usr/local/bin/master_ip_failover
(3) 手工添加主庫vip
ifconfig eth0:1 10.0.0.55/24
(4) 重啟MHA
`
masterha_stop --conf=/etc/mha/mng.cnf
nohup masterha_manager --conf=/etc/mha/mng.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null> /var/log/mha/app1/manager.log 2>&1 &
masterha_check_status --conf=/etc/mha/mng.cnf#查看啟動狀態
2.4 故障切換通知
郵件提醒send_report
- 參數:在配置文件中添加以下
report_script=/usr/local/bin/send - 準備郵件腳本
send_report
(1)準備發郵件的腳本(上傳 email_2019-最新.zip中的腳本,到/usr/local/bin/中)
(2)將準備好的腳本添加到mha配置文件中,讓其調用
(3)重啟MHA
masterha_stop --conf=/etc/mha/mng.cnf
nohup masterha_manager --conf=/etc/mha/mng.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null> /var/log/mha/app1/manager.log 2>&1 &
masterha_check_status --conf=/etc/mha/mng.cnf#查看啟動狀態
2.5 binlog_server數據補償功能
binlogserver配置:
找一臺額外的機器,必須要有5.6以上的數據庫版本,支持gtid并開啟
vim /etc/mha/mng.cnf
[binlog1]
no_master=1
hostname=10.0.0.53
master_binlog_dir=/data/mysql/binlog
創建必要目錄
mkdir -p /data/mysql/binlog
chown -R mysql.mysql /data/*
修改完成后,將主庫binlog拉過來(從000001開始拉,之后的binlog會自動按順序過來)
拉取主庫binlog日志(日志拉取時一定要cd 到日志目錄下)
cd /data/mysql/binlog
mysqlbinlog -R --host=10.0.0.51 --user=mha --password=mha --raw --stop-never mysql-bin.000001 &
注意:
拉取日志的起點,需要按照目前從庫的已經獲取到的二進制日志點為起點
(3)重啟MHA
masterha_stop --conf=/etc/mha/mng.cnf
nohup masterha_manager --conf=/etc/mha/mng.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null> /var/log/mha/app1/manager.log 2>&1 &
masterha_check_status --conf=/etc/mha/mng.cnf#查看啟動狀態
恢復基于MHA的高可用思路:
a、恢復故障節點
b、重新確認主從關系 change master to
c、在MHA配置文件中將故障節點添加回去
d、binlog 拉取時指向新的主庫
mysqlbinlog -R --host=10.0.0.52 --user=mha --password=mha --raw --stop-never mysql-bin.000001 &
e、重啟MHA
三、 MHA 配合Atlas 實現數據庫的讀寫分離
1、atlas 配置
1.1 上傳 Atlas軟件包后 直接安裝即可,沒有依賴關系
1.2 安裝后Atlas配置文件存放在/usr/local/mysql-proxy/conf
1.3 備份并重新生成新的配置文件
cd /usr/local/mysql-proxy/conf
mv test.cnf test.cnf.bak
cat > /usr/local/mysql-proxy/conf/test.cnf <<EOF
[mysql-proxy]
admin-username = user
admin-password = pwd
proxy-backend-addresses = 10.0.0.55:3306 #主庫配置
proxy-read-only-backend-addresses = 10.0.0.51:3306,10.0.0.53:3306 #兩個從庫配置
pwds = repl:3yb5jEku5h4=,mha:O2jBXONX098=
daemon = true
keepalive = true
event-threads = 8
log-level = message
log-path = /usr/local/mysql-proxy/log
sql-log=ON
proxy-address = 0.0.0.0:33060
admin-address = 0.0.0.0:2345
charset=utf8
EOF
1.4 啟動配置文件
/usr/local/mysql-proxy/bin/mysql-proxyd test start
1.5 測試
注意這里-h 對應的ip 是Atlas 安裝節點的IP, -u -p 信息必須和數據庫內的一致(后端數據庫擁有的用戶名和密碼)
[root@m01 /usr/local/mysql-proxy/bin]# mysql -umha -pmha -h10.0.0.61 -P33060
MySQL [(none)]> select @@server_id; #測試結果可以看到兩個從庫的server_id
MySQL [(none)]> begin; select @@server_id commit; 可以看到主庫的數據庫節點
2、 Atlas的管理
這里的 -u -p Atlas配置文件中的用戶名和密碼,-h 是Atlas安裝節點的地址
mysql -uuser -ppwd -h10.0.0.61 -P2345
2.1 開用戶
(1) 后端節點添加用戶
db01 [(none)]>grant all on . to root@'10.0.0.%' identified by '123';
(2) 密碼加密
/usr/local/mysql-proxy/bin/encrypt 123
(3) 修改配置
pwds = repl:3yb5jEku5h4=,mha:O2jBXONX098=,root:3yb5jEku5h4=
(4) 重啟
/usr/local/mysql-proxy/bin/mysql-proxyd test restart
2.2 內部管理操作
(0) 獲取幫助
select * from help
使用方法 | 說明 |
---|---|
SELECT * FROM help | shows this help |
SELECT * FROM backends | lists the backends and their state |
SET OFFLINE $backend_id | offline backend server, $backend_id is backend_ndx's id |
SET ONLINE $backend_id | online backend server, ... |
ADD MASTER $backend | example: "add master 127.0.0.1:3306", ... |
ADD SLAVE $backend | example: "add slave 127.0.0.1:3306", ... |
REMOVE BACKEND $backend_id | example: "remove backend 1", ... |
SELECT * FROM clients | lists the clients |
ADD CLIENT $client | example: "add client 192.168.1.2", ... |
REMOVE CLIENT $client | example: "remove client 192.168.1.2", ... |
SELECT * FROM pwds | lists the pwds |
ADD PWD $pwd | example: "add pwd user:raw_password", ... |
ADD ENPWD $pwd | example: "add enpwd user:encrypted_password", ... |
REMOVE PWD $pwd | example: "remove pwd user", ... |
SAVE CONFIG | save the backends to config file |
SELECT VERSION | display the version of Atlas |
(1) 查看后端節點
db03 [(none)]>SELECT * FROM backends;
(2) 上線和下線節點
SET OFFLINE $backend_id
SET ONLINE $backend_id
(3) 添加或刪除從節點
db03 [(none)]>REMOVE BACKEND 3;
db03 [(none)]> ADD SLAVE 10.0.0.53:3306;
(4) 查看和添加刪除用戶
db03 [(none)]> SELECT * FROM pwds;
db03 [(none)]>REMOVE PWD repl;
db03 [(none)]>ADD PWD repl:123;
(5) 保存配置
db03 [(none)]>save config;