本文經過mysqldump命令方式先備份,再進行恢復。mysql
網上不少的關於數據庫遷移
的話題,都是經過拷貝數據庫/var/lib/mysql
目錄下的ibdata1
,ib_logfile0
,ib_logfile1
等等操做,我都一一試過,所有失敗了。。sql
$ mysqldump --all-databases --user=root --password --master-data > backupdatabase.sql
複製代碼
若是要同時備備份數據表和存儲過程等,經過以下參數:shell
mysqldump -E -R --triggers --opt --single-transaction --master-data=2 --default-character-set=utf8 -uroot -p123456 zmgj > /tmp/zmgj.sql
複製代碼
若是備份以下報錯:數據庫
$ mysqldump: Error: Binlogging on server not active
複製代碼
錯誤緣由vim
binlog日誌會記錄下數據庫的因此增刪改操做,當不當心刪除、清空數據,或數據庫系統出錯,這時候就可使用binlog日誌來還原數據庫,簡單來講就是一個記錄備份的東西。mysqldump須要這個功能開啓。bash
解決辦法工具
編輯my.cnf
:spa
$ sudo vim /etc/my.cnf
複製代碼
在[mysqld]下添加:rest
log-bin=mysql-bin
#server-id=1 #視狀況添加,有時候添加這個致使數據庫啓動失敗
複製代碼
重啓mysql,執行下面的其中一條便可:日誌
service mysqld restart
service mysql restart
systemctl restart mysql.service
複製代碼
$ mysql -u root -p < backupdatabase.sql
複製代碼
也可使用如SQLyog
工具,鏈接數據庫後,右擊執行sql腳本
。
若是恢復以下報錯:
ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.
複製代碼
錯誤緣由 因爲 MySQL Innodb 引擎表索引字段長度的限制爲 767 字節,所以對於多字節字符集的大字段(或者多字段組合索引),建立索引會出現上面的錯誤。 以 utf8mb4 字符集 字符串類型字段爲例:utf8mb4 是 4 字節字符集,則默認支持的索引字段最大長度是: 767 字節 / 4 字節每字符 = 191 字符,所以在 varchar(255) 或 char(255) 類型字段上建立索引會失敗。
解決辦法: 1.調整參數 innodb_large_prefix 爲 ON 將 Innodb_large_prefix 修改成 on 後,對於 Dynamic 和 Compressed 格式的InnoDB 引擎表,其最大的索引字段長度支持到 3072 字節。Mysql5.7默認是ON,通常能成功。
[mysqld]
default-storage-engine=INNODB
innodb_file_format=barracuda
innodb_file_per_table=true
innodb_large_prefix=true
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_allowed_packet=500M
複製代碼
建立表的時候指定表的 row format 格式爲 Dynamic
CREATE TABLE `ao_0ac321_recommendation_ao` (
`CATEGORY` VARCHAR(255) DEFAULT NULL,
`CUSTOM_FIELD_ID` BIGINT(20) DEFAULT NULL,
`ID` VARCHAR(255) NOT NULL,
`NAME` VARCHAR(255) DEFAULT NULL,
`PERFORMANCE_IMPACT` DOUBLE DEFAULT NULL,
`PROJECT_IDS` LONGTEXT,
`RESOLVED` TINYINT(1) DEFAULT NULL,
`TYPE` VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
複製代碼