數據庫(三)
阿新 • • 發佈:2018-05-21
MYSQL 備份 忘記數據庫的密碼了。。。(解決方法)
1.網上教程很多,總結下即可
2.一般分為配置文件跳過密碼登陸mysql(此方法要重啟數據庫)和命令行後臺跳過密碼登陸
3.修改完密碼切記刷新授權表
4.刪除配置文件裏的參數(此方法需重啟)或終止後臺命令
5.測試
1.網上教程很多,總結下即可
2.一般分為配置文件跳過密碼登陸mysql(此方法要重啟數據庫)和命令行後臺跳過密碼登陸
3.修改完密碼切記刷新授權表
4.刪除配置文件裏的參數(此方法需重啟)或終止後臺命令
5.測試
MVCC
備份的分類
1.備份:數據以隔離的方式保存,恢復速度慢,可以防止人為誤操作
2.冗余:主從,恢復速度快,不能防止人為誤操作
3.異地災備:
備份分為
1.以文件的方式備份,最小單元為文件,備份的時間點難控制(如果要控制時間----停服務),速度快。
2.以sql語句方式備份,最小單元sql語句,備份的時間點較好控制,速度慢。
*(文件備份也稱物理備份,sql語句備份也稱邏輯備份)
3.備份數據量分為:全量備份(對所有數據備份)
增量備份(對於上一次備份的修改的地方備份)
差異備份(對於全量備份的修改的地方備份)
4.備份時服務可用性分為:在線熱備----備份(備份過程服務可用)
離線冷備----備份(備份過程不可用)
溫備 ----備份 (備份過程可讀不可寫)
備份原則
數據一致:時間點,狀態。
服務可用性:讀,寫。
物理備份工具
tar, lvm(快照), percona-xtrabackup
邏輯備份工具
mysqldump
物理備份思路
殺服務,保數據。
1.停服務
2.全備
3.恢復服務
物理備份還原思路
殺服務,清環境
1.停止服務
2.清理環境
3.導數據
4.改權限
5.啟動服務
實驗
yum install -y mariadb-server (安裝數據庫) [root@localhost mysql]# mysqladmin -uroot password 123123 (設置密碼) tar -czf /tmp/all.tgz /var/lib/mysql/ (打包數據) [root@localhost mysql]# mysql -uroot -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 5.5.56-MariaDB MariaDB Server Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec) MariaDB [(none)]> drop database test;(誤操作將庫刪除) Query OK, 1 row affected (0.00 sec) [root@localhost mysql]# systemctl stop mariadb (停服務) [root@localhost mysql]# rm -rf /var/lib/mysql/ (清環境) [root@localhost mysql]# [root@localhost mysql]# tar -xf /tmp/all.tgz -C /(導數據) [root@localhost mysql]# [root@localhost mysql]# systemctl start mariadb(啟動服務---這裏要是起不來服務先kill掉mysql相關進程) [root@localhost mysql]# mysql -uroot -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.5.56-MariaDB MariaDB Server Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | (數據回來了) +--------------------+ 4 rows in set (0.01 sec) MariaDB [(none)]> *(這種方法有缺點,總不能時時刻刻都打包吧,解決方法)
邏輯備份:mysqldump
myisam 該存儲引擎要保證數據完整,服務不一定可用(可用的情況---加全局讀鎖),時間點mysqldump開始的時候
innodb 服務可用,基於mvcc版本控制,時間點mysqldump開始的時候
1.控制服務狀態
myisam --lock-all-tables
innodb --single-transaction
2.備份對象
所有庫:-A 單庫 庫名 多個庫 -B
mysqldump -u用戶 -p密碼 備份對象 控制服務狀態 >備份路徑
MariaDB [test]> create table list(id int) engine=myisam; (指定表類型為myisam) Query OK, 0 rows affected (0.00 sec) MariaDB [test]> show table status\G; (查看表屬性) *************************** 1. row *************************** Name: list Engine: MyISAM Version: 10 Row_format: Fixed Rows: 0 Avg_row_length: 0 Data_length: 0 Max_data_length: 1970324836974591 Index_length: 1024 Data_free: 0 Auto_increment: NULL Create_time: 2018-05-20 15:04:29 Update_time: 2018-05-20 15:04:29 Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: *************************** 2. row *************************** Name: test1 Engine: InnoDB Version: 10 Row_format: Compact Rows: 2 Avg_row_length: 8192 Data_length: 16384 Max_data_length: 0 Index_length: 0 Data_free: 10485760 Auto_increment: NULL Create_time: 2018-05-20 14:38:32 Update_time: NULL Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: 2 rows in set (0.00 sec) ERROR: No query specified MariaDB [test]> insert into list values (1);(插入一條數據) Query OK, 1 row affected (0.00 sec) MariaDB [test]> Bye [root@localhost mysql]# mysqldump -uroot -p123123 test --lock-all-tables > /tmp/test.sql (加讀鎖備份) [root@localhost mysql]# mysql -uroot -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 4 Server version: 5.5.56-MariaDB MariaDB Server Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. MariaDB [(none)]> use test; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [test]> select * from list; +------+ | id | +------+ | 1 | +------+ 1 row in set (0.00 sec) MariaDB [test]> delete from list where id=1 (誤操作) -> ; Query OK, 1 row affected (0.00 sec) MariaDB [test]> Bye [root@localhost mysql]# mysql -uroot -p123123 test < /tmp/test.sql (導入數據) [root@localhost mysql]# mysql -uroot -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 6 Server version: 5.5.56-MariaDB MariaDB Server Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. MariaDB [(none)]> use test; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [test]> select * from list; +------+ | id | +------+ | 1 | +------+ 1 row in set (0.01 sec) () *(多個庫與單庫操作一樣) *(對整個庫采取全局讀鎖的方式備份,但是在恢復數據時,要手動刪除之前的庫) 全庫的思路 1.停服務 2.清環境 3.啟動服務 4.導數據 5.刷新授權表 6.測試 實時備份 常規日誌: /var/log/mariadb/mariadb.log 默認開 二進制日誌 binlog DDL DCL DML 默認不開 慢查詢日誌: slowlog 查詢日誌: DQL 二進制日誌(實時增量備份) [root@localhost binlog]# vim /etc/my.cnf [mysqld] log-bin=/var/lib/binlog/logbin (開啟二進制日誌) [root@localhost binlog]# mkdir /var/lib/binlog(創建目錄) [root@localhost binlog]# chown mysql. /var/lib/binlog/(加權限) [root@localhost binlog]# systemctl restart mariadb(啟動服務) [root@localhost binlog]# ls logbin.000001 logbin.index(自動生成) [root@localhost binlog]# file logbin.000001 logbin.000001: MySQL replication log (二進制日誌不能直接使用vim編輯或者cat查看) [root@localhost binlog]# mysqlbinlog logbin.000001 (使用mysqlbinlog查看) /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4 #180520 16:22:23 server id 1 end_log_pos 245 Start: binlog v 4, server v 5.5.56-MariaDB created 180520 16:22:23 at startup # Warning: this binlog is either in use or was not closed properly. ROLLBACK/*!*/; BINLOG ‘ PzABWw8BAAAA8QAAAPUAAAABAAQANS41LjU2LU1hcmlhREIAbG9nAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAA/MAFbEzgNAAgAEgAEBAQEEgAA2QAEGggAAAAICAgCAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAANRcIYA== ‘/*!*/; DELIMITER ; # End of log file ROLLBACK /* added by mysqlbinlog */; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/; [root@localhost binlog]# mysqlbinlog logbin.000001 |grep create -B 10 (-B 是之前 -A 是之後) /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4 #180520 16:22:23 server id 1 end_log_pos 245 Start: binlog v 4, server v 5.5.56-MariaDB created 180520 16:22:23 at startup mysqlbinlog --help(可以基於時間點恢復,參數幫助裏有) 定位文件 | mysql -u用戶 -p密碼 (恢復操作) *(時間左閉右開)(問題又來了,如果兩個人同時操作怎麽基於時間恢復?解決方法----基於位置恢復) [root@localhost binlog]# mysql -e "flush logs" -uroot -p123123(手動刷新日誌) [root@localhost binlog]# ls logbin.000001 logbin.000002 logbin.index DELIMITER /*!*/; # at 4 (這個是位置標記----左閉右開) 數據寫入量大的時候不可能自己去一個個找---解決方法 [root@localhost binlog]# mysqldump -uroot -p123123 test --flush-logs --single-transaction --master-data=2 > /tmp/master.sql --master-data=2(可以指定好日誌位置,下恢復操作直接從這裏開始即可) -- CHANGE MASTER TO MASTER_LOG_FILE=‘logbin.000005‘, MASTER_LOG_POS=245;(這裏245就是指定出來的位置) 備份myisam 1.鎖表 2.備份數據 文件 list.frm 表結構 list.MYD 表數據 myisam data list.MYI 表索引 myisam index 3.獲取二進制日誌位置 4.解鎖表 備份innodb 存儲結構 文件 庫 /list.frm 表結構 /var/lib/mysql/ibdata1 表空間 存放所有數據 ib_logfile0 事務日誌 ib_logfile1 事務日誌:begin事物開始就記錄 如有故障,進行回滾 二進制日誌:commit之後的刪寫操作 實時備份 xtrabackup 全量備份 基於事物日誌做備份 增量備份的手段和二進制日誌的標記號類似 xtrabackup 全量備份 實驗 [percona-xtrabackup下載地址] (https://www.percona.com/downloads/XtraBackup/LATEST/) [root@localhost xtraba]# ls percona-xtrabackup-24-2.4.11-1.el7.x86_64.rpm percona-xtrabackup-test-24-2.4.11-1.el7.x86_64.rpm percona-xtrabackup-24-debuginfo-2.4.11-1.el7.x86_64.rpm yum localinstall -y * (安裝) mkdir ~/mybackup(創建目錄) innobackupex --user=root --password=123123 /root/mybackup/ (備份文件) MariaDB [(none)]> drop database test;(誤操作) systemctl stop mariadb (停服務) rm -rf /var/lib/mysql/(清環境) innobackupex --apply-log /root/mybackup/2018-05-20_18-10-44/(回滾並重演) innobackupex --copy-back /root/mybackup/2018-05-20_18-10-44/ (寫入數據) chown mysql. -R /var/lib/mysql/(修改權限) systemctl start mariadb(啟動服務) mysql -uroot -p(驗證) xtrabackup增量備份 實驗 1.進入數據庫 2. insert into list values (100); begin; insert into list values (200); 3. 2018-05-20 18:45:26 innobackupex --user=root --password=123123 --incremental-basedir=/root/mybackup/2018-05-20_18-10-44/ --incremental /root/mybackup/ (增備) 4. 進入數據庫 5. commit; begin; insert into list values (300); 6. innobackupex --user=root --password=123123 --incremental-basedir=/root/mybackup/2018-05-20_18-45-26/ --incremental /root/mybackup/ (增備) 7. 847 2018-05-20 18:57:53 innobackupex --user=root --password=123123 --apply-log --redo-only /root/mybackup/2018-05-20_18-10-44/ (重演不回滾) 8. 848 2018-05-20 18:57:53 innobackupex --user=root --password=123123 --apply-log --redo-only /root/mybackup/2018-05-20_18-10-44/ --incremental-dir=/root/mybackup/2018-05-20_18-45-26/ (第一次增備數據合並全量備份) 8. 849 2018-05-20 19:00:15 innobackupex --user=root --password=123123 --apply-log --redo-only /root/mybackup/2018-05-20_18-10-44/ --incremental-dir=/root/mybackup/2018-05-20_18-48-28/(第二次增備數據合並全量備份) 9. 854 2018-05-20 19:01:13 innobackupex --apply-log /root/mybackup/2018-05-20_18-10-44/(回滾並重演) [root@localhost mysql]# systemctl stop mariadb (停服務) 10. 855 2018-05-20 19:01:43 rm -rf /var/lib/mysql/ (清環境) 856 2018-05-20 19:02:03 innobackupex --copy-back /root/mybackup/2018-05-20_18-10-44/(寫入數據) 857 2018-05-20 19:02:26 chown mysql. -R /var/lib/mysql/(給權限) 866 2018-05-20 19:04:43 systemctl start mariadb(啟動服務) 這裏300這條數據應該是進不來的,但是我的進來了,我的表存儲結構myisam,不知道咋回事。。。。 下午沒寫完,在家裏用6.5的系統寫完,有些不一樣的地方還請包涵 一開虛擬機就報錯了。。。 Linux啟動提示“unexpected inconsistency;RUN fsck MANUALLY” 解決方法: fsck不僅可以對文件系統進行掃描,還能修正文件系統的一些問題,值得註意的是fsck掃描文件系統時一定要在單用戶模式、修復模式或把設備umount後進行!!! 首先進行單用戶模式或直接在那裏輸入root密碼進入修復模式(單用戶有的也進不去) 再用命令fsck修復所提示出錯的分區或磁盤: #fsck.ext4 -y /dev/sda2 ——>出錯所在分區或磁盤 註:請選擇你的文件系統格式類似(ext2?ext3?ext4?),-y 選項指定檢測每個文件是自動輸入yes,修復過程也有可能損壞系統文件! 修復ok,reboot下。 [root@CDN ~]# mysqladmin -uroot password 123 mysqladmin: You cannot use ‘password‘ command as mysqld runs with grant tables disabled (was started with --skip-grant-tables). Use: "mysqladmin flush-privileges password ‘*‘" instead (這裏你的密碼已經設置好了,看這個信息應該是提示) centos6.5下載percona-xtrabackup [root@CDN opt]# rpm -ivh percona-xtrabackup-24-2.4.11-1.el6.x86_64.rpm warning: percona-xtrabackup-24-2.4.11-1.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY error: Failed dependencies:(缺少依賴關系包--解決方法) 1.wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm 2.yum install epel-release-6-8.noarch.rpm 3.yum install libev(如果還是下載不了--解決方法) vim /etc/yum.repos.d/epel.repo [epel] name=Extra Packages for Enterprise Linux 6 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch mirrorlist=http://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch(添加上這條)
[root@CDN bin]# innobackupex --user=root --password=123 /root/mybackup (有報錯,耐心。。)
180520 08:20:50 innobackupex: Starting the backup operation
IMPORTANT: Please check that the backup run completes successfully.
At the end of a successful backup run innobackupex
prints "completed OK!".
180520 08:20:50 version_check Connecting to MySQL server with DSN ‘dbi:mysql:;mysql_read_default_group=xtrabackup‘ as ‘root‘ (using password: YES).
180520 08:20:50 version_check Connected to MySQL server
180520 08:20:50 version_check Executing a version check against the server...
180520 08:20:50 version_check Done.
180520 08:20:50 Connecting to MySQL server host: localhost, user: root, password: set, port: not set, socket: not set
Error: Built-in InnoDB in MySQL 5.1 is not supported in this release. You can either use Percona XtraBackup 2.0, or upgrade to InnoDB plugin.(查看翻譯後,好像是版本不支持,還有一點可以升級innodb插件)
升級innodb插件
1.[root@CDN bin]# vim /etc/my.cnf
[mysqld]
ignore-builtin-innodb
plugin-load=innodb=ha_innodb_plugin.so
2.重啟mysqld
3.ok
備份固然是好的,但是恢復速度實在是慢(解決方法---冗余)
備份和冗余相輔相成
下次分享下冗余。。。
數據庫(三)