阿里雲 Mysql RDS 在 私有環境的恢復測試。
阿里雲 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql備份恢復測試MySql
- RAC環境的恢復策略
- 【Mysql】xtrabackup 備份和恢復測試MySql
- 【MYSQL備庫恢復速度測試 半同步速度測試】MySql
- mysql備份和恢復測試(一)--xtrabackupMySql
- 公有云RDS-MySQL基準測試MySql
- mysql效能測試庫的一次CRASH恢復MySql
- SQLSERVER恢復測試SQLServer
- Oracle恢復測試Oracle
- 阿里雲RDS物理備份恢復至本地伺服器8.0阿里伺服器
- rman 恢復機制與恢復測試
- 在阿里,我們如何管理測試環境阿里
- 配置開發環境、生成環境、測試環境開發環境
- Oracle RMAN恢復測試Oracle
- MySQL InnoDB Cluster環境搭建和簡單測試MySql
- [MySQL生產環境資料恢復]innobackupex: fatal error: OR no 'datadir'MySql資料恢復Error
- 在windows系統環境下實現NBU異機恢復Windows
- 記阿里雲 RDS MySQL 的一個大坑阿里MySql
- 如何搭建良好的軟體測試環境?測試環境對軟體測試起到什麼作用?
- dbdeployer 快速安裝MySQL8.0各測試環境MySql
- Xcode配置測試環境和線上環境XCode
- 控制檔案恢復測試
- 在centos中安裝jenkins master測試環境CentOSJenkinsAST
- 如何從自建MySQL遷移至阿里雲RDS for MySQL的教程MySql阿里
- kaldi環境搭建 | yesno 測試
- android測試環境搭建Android
- Windows配置Delve的測試環境Windows
- OCM實驗-測試環境的搭建
- 搭建rac+DataGuard的測試環境
- 【管理篇備份恢復】rman恢復測試(二) 控制檔案恢復(三)
- 【管理篇備份恢復】rman恢復測試(二) 控制檔案恢復(二)
- 【管理篇備份恢復】rman恢復測試(二) 控制檔案恢復(一)
- PDM測試資料庫恢復資料庫
- 裝在筆記本里的私有云環境:持續整合(上)筆記
- Oracle常規恢復的實驗測試Oracle
- rman備份恢復-rman恢復資料檔案測試
- win10怎麼恢復出廠設定找不到恢復環境Win10
- 用 Spring 區分開發環境、測試環境、生產環境Spring開發環境