MYSQL主從復制及讀寫分離

一、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 vip = '10.0.0.55/24'; mykey = '1';
my ssh_start_vip = "/sbin/ifconfig eth0:key vip"; myssh_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

  1. 參數:在配置文件中添加以下
    report_script=/usr/local/bin/send
  2. 準備郵件腳本
    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;

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 人人都羨慕老師,可有幾個理解老師的辛酸,明明是在傾其所有,他們卻說你沒事找事。我已漸漸迷茫,漸漸失去了方向,內心隱...
    想飛的心閱讀 235評論 0 1
  • 連續來的多云天氣讓囂張跋扈的熱氣終于泄了下去。沒有了炎炎烈日,出門行走也頓覺神清氣爽了,躁動的心終于歸復平靜。 總...
    幸福D蘇眉閱讀 555評論 0 5
  • 在生活中,要學會前行,曾經縱然美好,卻不是我們可以一直擁有的,太多美好都轉瞬即逝,曾經以為的幸福和快樂,換了一個時...
    磨人魚閱讀 441評論 0 0
  • 荒園無人跡 野樹伴風眠 葉落塞池滿 鳥啼破林暗 矮舍犬吠疾 小徑貓行緩 信步出門去 揮去一院寒
    黑瞳_6f0d閱讀 336評論 0 0