阿里雲 Mysql RDS 在 私有環境的恢復測試。

babyyellow發表於2022-10-19

阿里雲 RDS 做一定的技術遮蔽,這是必須的。 


那麼從阿里雲 下載一個備份集, 是否可以順利的恢復成一個資料庫例項, 是一件技術活。 


我們做了一個測試。 



下載一個  RDS  例項備份。 



一般字尾為   “xb”


第一步: 

需要安裝解壓軟體: 


安裝 qpress
安裝 xtrabackup
cat data_20221019045743_qp.xb | xbstream -x -v -C /usr/local/mysql/data_common_xtrabackup



innobackupex --decompress --remove-original /usr/local/mysql/data_common_xtrabackup
innobackupex --default-files=/usr/local/mysql/data_common_xtrabackup/backup-my.cnf --apply-log /usr/local/mysql/data_common_xtrabackup



第二步: 


把 backup-my.cnf
innodb_log_files_in_group=2
innodb_log_file_size=1572864000
innodb_log_buffer_size=8388608
innodb_page_size=16384
innodb_undo_tablespaces=2
這幾個引數放到我們自己的引數檔案裡面   不同 RDS 肯能引數值不一樣, 自己搞定就行了。 




第三步:   啟動沒問題。 但是發現許可權不夠啊。 沒有root 。 

      關閉資料庫會成為問題。 需要修復。 



第四步:  啟動引數加  skip-grant-tables   用root  可以登入了。 


新增root 使用者吧。 



mysql> update mysql.user set authentication_string = password('新的密碼') where user='使用者名稱' and host='%';


修改使用者密碼,報錯“Unknown trigger has an error in its body: ‘Unknown system variable ‘maintain_user”


報錯。 無法執行。 


第五步:     mysql 庫下面有兩個trigger  坐在資料庫級別上。   先在資料庫目錄裡面, 把這倆trigger 的檔名改了。 


                    mv  命令直接改。 


第六步:   再修改 使用者名稱密碼: 


                   mysql> update mysql.user set authentication_string = password('新的密碼') where user='使用者名稱' and host='%';
ERROR 1064 (42000): Unknown trigger has an error in its body: 'Unknown system variable 'maintain_user_list''


報錯,但是可以改了。 


                  新增使用者,  許可權。  


然後就可以愉快的測試了。 



第七步:  如果要做slave 同步  RDS  可以 開始搭建 slave  GTID 相關的動作了。 這裡不表。 



第八步: 總結: 


把 backup-my.cnf
innodb_log_files_in_group=2
innodb_log_file_size=1572864000
innodb_log_buffer_size=8388608
innodb_page_size=16384
innodb_undo_tablespaces=2
這幾個引數放到我們的引數檔案裡面
然加
--skip-grant-tables
恢復目錄裡面 將2個 user.TRG  proxies_priv.TRG  先重新命名
然後啟動
然後修改user 表 ,把 aliyun_root 那個修改成 root localhost 以及我們自己的密碼。
退出去掉
--skip-grant-tables
重啟。
再做set gtid_pureged




第九步: 


trigger : 


proxies_priv.TRG

TYPE=TRIGGERS
triggers='CREATE DEFINER=`aliyun_root`@`127.0.0.1` trigger protect_aliroot_insert_proxy
before insert on mysql.proxies_priv
for each row
begin
select user() into @current_user_host;
select reverse(substring_index(reverse(@current_user_host), \'@\', -1)) into @current_user;
select @@global.maintain_user_list into @maintain_list;
set @cnt= 1 + LENGTH(@maintain_list) - LENGTH(REPLACE(@maintain_list, \',\', \'\'));
SET @i=1 ;
SET @allowed=0;
WHILE @i <= @cnt DO
  SET @result = REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(@maintain_list,\',\',@i)),\',\',1));
  SET @i= @i + 1;
  if @result=@current_user then
    SET @allowed=1;
  end if;
end while;
if @allowed=0 then
  signal sqlstate \'45003\' set message_text = \'can not modify mysql.proxies_priv\';
end if;
end' 'CREATE DEFINER=`aliyun_root`@`127.0.0.1` trigger protect_aliroot_update_proxy
before update on mysql.proxies_priv
for each row
begin
select user() into @current_user_host;
select reverse(substring_index(reverse(@current_user_host), \'@\', -1)) into @current_user;
select @@global.maintain_user_list into @maintain_list;
set @cnt= 1 + LENGTH(@maintain_list) - LENGTH(REPLACE(@maintain_list, \',\', \'\'));
SET @i=1 ;
SET @allowed=0;
WHILE @i <= @cnt DO
  SET @result = REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(@maintain_list,\',\',@i)),\',\',1));
  SET @i= @i + 1;
  if @result=@current_user then
    SET @allowed=1;
  end if;
end while;
if @allowed=0 then
  signal sqlstate \'45003\' set message_text = \'can not modify mysql.proxies_priv\';
end if;
end' 'CREATE DEFINER=`aliyun_root`@`127.0.0.1` trigger protect_aliroot_delete_proxy
before delete on mysql.proxies_priv
for each row
begin
select user() into @current_user_host;
select reverse(substring_index(reverse(@current_user_host), \'@\', -1)) into @current_user;
select @@global.maintain_user_list into @maintain_list;
set @cnt= 1 + LENGTH(@maintain_list) - LENGTH(REPLACE(@maintain_list, \',\', \'\'));
SET @i=1 ;
SET @allowed=0;
WHILE @i <= @cnt DO
  SET @result = REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(@maintain_list,\',\',@i)),\',\',1));
  SET @i= @i + 1;
  if @result=@current_user then
    SET @allowed=1;
  end if;
end while;
if @allowed=0 then
  signal sqlstate \'45003\' set message_text = \'can not modify mysql.proxies_priv\';
end if;
end'
sql_modes=0 0 0
definers='aliyun_root@127.0.0.1' 'aliyun_root@127.0.0.1' 'aliyun_root@127.0.0.1'
client_cs_names='utf8' 'utf8' 'utf8'
connection_cl_names='utf8_general_ci' 'utf8_general_ci' 'utf8_general_ci'
db_cl_names='utf8_general_ci' 'utf8_general_ci' 'utf8_general_ci'
created=165113905344 165113905344 165113905344








user.TRG:


TYPE=TRIGGERS
triggers='CREATE DEFINER=`aliyun_root`@`127.0.0.1` trigger protect_aliroot_insert
before insert on mysql.user
for each row
begin
select user() into @current_user_host;
select reverse(substring_index(reverse(@current_user_host), \'@\', -1)) into @current_user;
select @@global.maintain_user_list into @maintain_list;
set @cnt= 1 + LENGTH(@maintain_list) - LENGTH(REPLACE(@maintain_list, \',\', \'\'));
SET @i=1 ;
SET @allowed=0;
SET @modify_maintain=0;
WHILE @i <= @cnt DO
  SET @result = REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(@maintain_list,\',\',@i)),\',\',1));
  SET @i= @i + 1;
  if @result=@current_user then
    SET @allowed=1;
  end if;
  if @result=new.user then
    SET @modify_maintain=1;
  end if;
end while;
if (\'Y\' = new.Shutdown_priv
        or \'Y\' = new.Show_db_priv
    or \'Y\' = new.Super_priv
    or \'Y\' = new.Create_tablespace_priv
    or \'Y\' = new.File_priv) then
  SET @modify_maintain=1;
end if;
if @allowed=0 and @modify_maintain=1 then
  signal sqlstate \'45002\' set message_text = \'can not insert reserved users or privileges\';
end if;
end' 'CREATE DEFINER=`aliyun_root`@`127.0.0.1` trigger protect_aliroot_update
before update on mysql.user
for each row
begin
select user() into @current_user_host;
select reverse(substring_index(reverse(@current_user_host), \'@\', -1)) into @current_user;
select @@global.maintain_user_list into @maintain_list;
set @cnt= 1 + LENGTH(@maintain_list) - LENGTH(REPLACE(@maintain_list, \',\', \'\'));
SET @i=1 ;
SET @allowed=0;
SET @modify_maintain=0;
WHILE @i <= @cnt DO
  SET @result = REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(@maintain_list,\',\',@i)),\',\',1));
  SET @i= @i + 1;
  if @result=@current_user then
    SET @allowed=1;
  end if;
  if @result=new.user or @result=old.user then
    SET @modify_maintain=1;
  end if;
end while;
if (old.Shutdown_priv <> new.Shutdown_priv
    or old.Show_db_priv <> new.Show_db_priv
    or old.Super_priv <> new.Super_priv
    or old.Create_tablespace_priv <> new.Create_tablespace_priv
    or old.File_priv <> new.File_priv
    ) then
  SET @modify_maintain=1;
end if;
if @allowed=0 and @modify_maintain=1 then
  signal sqlstate \'45001\' set message_text = \'can not update reserved users or privileges\';
end if;
end' 'CREATE DEFINER=`aliyun_root`@`127.0.0.1` trigger protect_aliroot_delete
before delete on mysql.user
for each row
begin
select user() into @current_user_host;
select reverse(substring_index(reverse(@current_user_host), \'@\', -1)) into @current_user;
select @@global.maintain_user_list into @maintain_list;
set @cnt= 1 + LENGTH(@maintain_list) - LENGTH(REPLACE(@maintain_list, \',\', \'\'));
SET @i=1 ;
SET @allowed=0;
SET @modify_maintain=0;
WHILE @i <= @cnt DO
  SET @result = REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(@maintain_list,\',\',@i)),\',\',1));
  SET @i= @i + 1;
  if @result=@current_user then
    SET @allowed=1;
  end if;
  if @result=old.user then
    SET @modify_maintain=1;
  end if;
end while;
if @allowed=0 and @modify_maintain=1 then
  signal sqlstate \'45000\' set message_text = \'can not delete reserved users or privileges\';
end if;
end'
sql_modes=0 0 0
definers='aliyun_root@127.0.0.1' 'aliyun_root@127.0.0.1' 'aliyun_root@127.0.0.1'
client_cs_names='utf8' 'utf8' 'utf8'
connection_cl_names='utf8_general_ci' 'utf8_general_ci' 'utf8_general_ci'
db_cl_names='utf8_general_ci' 'utf8_general_ci' 'utf8_general_ci'
created=165113905344 165113905344 165113905344





來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-2919163/,如需轉載,請註明出處,否則將追究法律責任。

相關文章