mysql數據備份
數據備份類型
1、完全備份
2、部分備份
- 增量備份
- 差異備份
mysql數據備份的方式
1、熱備份:數據在執行備份時,讀寫不影響
2、溫備份:數據庫在執行備份時,讀可以執行,寫不可以執行
3、冷備份:數據庫在備份時,讀寫都不可以執行
mysql支持的存儲引擎
1、myisam:支持溫備份和冷備份
2、innodb:三種備份方式都支持
備份方式
1、物理備份:通過tar、cp等直接打包複製數據庫文件
2、邏輯備份:通過特定的工具,從數據庫中導出數據並另存備份(邏輯備份會丟失數據精度)
備份的數據
1、數據
2、二進制日誌,innodb日誌
3、代碼(存儲過程,存儲函數,觸發器,事件調度器)
4、服務器配置文件
備份工具
1、mysqldum :邏輯備份工具
2、cp,tar 等歸檔複製工具
3、lvm2,snapshot 肌膚熱備,藉助文件系統管理工具進行備份
4、mysqlhotcopy 幾乎冷備,僅支持mysiam
5、xtrabackup
- 數據量小用第二種方式對數據進行備份
- 數據量中等用第一中方式,先用mysqldump對數據庫進行完全備份,然後定期被封binary_log達到增量備份
- 數據量一般而又不過分影響業務進行,使用第三種備份方式
- 數據量大,可以運用第五種方式對數據進行備份
mysql優化
1、調優的幾個參數
[client]
port = 3306
socket = /data/3306/mysql.sock
[mysql]
no-auto-rehash
[mysqld]
user = mysql
port = 3306
socket = /data/3306/mysql.sock
basedir = /usr/local/mysql
datadir = /data/3306/data
open_files_limit = 10240
back_log = 600
max_connections = 3000
max_connect_errors = 6000
table_cache = 614
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 2M
Sort_Buffer_Size 是一個connection級參數,在每個connection(session)第一次需要使用這個buffer的時候,一次性分配設置的內存。
Sort_Buffer_Size 並不是越大越好,由於是connection級的參數,過大的設置+高併發可能會耗盡系統內存資源。例如:500個連接將會消耗 500*sort_buffer_size(8M)=4G內存
Sort_Buffer_Size 超過2KB的時候,就會使用mmap() 而不是 malloc() 來進行內存分配,導致效率降低。
join_buffer_size = 2M
thread_cache_size = 300
thread_concurrency = 8
query_cache_size = 64M
query_cache_limit = 4M
query_cache_min_res_unit = 2k
default-storage-engine = MyISAM
default_table_type = InnoDB
thread_stack = 192K
transaction_isolation = READ-COMMITTED
tmp_table_size = 256M
max_heap_table_size = 256M
long_query_time = 2
log_long_format
log-slow-queries=/data/3306/slow-log.log
binlog_cache_size = 4M
max_binlog_cache_size = 8M
max_binlog_size = 512M
expire_logs_days = 7
key_buffer_size = 2048M
read_buffer_size = 1M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_max_extra_sort_file_size = 10G
myisam_repair_threads = 1
skip-name-resolve
lower_case_table_names = 1
server-id = 1
innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 2048M
innodb_data_file_path = ibdata1:1024M:autoextend
innodb_file_io_threads = 4
innodb_thread_concurrency = 8
innodb_flush_log_at_trx_commit = 2
innodb_log_file_size = 128M
nnodb_log_buffer_size = 16M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_file_per_table = 0
wait_timeout = 10
獨享表空間(關閉)
[mysqldump]
quick
max_allowed_packet = 32M
[mysqld_safe]
log-error=/data/3306/mysql_oldboy.err
pid-file=/data/3306/mysqld.pid
2、軟件優化
- 選擇合適的存儲引擎
- 正確使用索引
- 避免使用select *
- 字段儘量設置爲NOT NULL
3、硬件優化
- linux內核用內存開緩存存放數據
- 增加應用緩存
- 用ssd代替機械硬盤
- 用ssd+sata混合存儲
4、架構優化
- 分表
- 讀寫分離:讀維護一些機器,寫維護一些機器,二進制文件的主從複製,延遲解決方案,
- 分庫
5、SQL慢查詢分析,調參數
慢查詢指執行超過一定時間的SQL查詢,語句記錄到慢查詢日誌,方便開發人員看日誌
找問題:
long_quary_time //定義慢查詢時間
slow_query_log //設置慢查詢開關
slow_query_log_file //設置慢查詢日誌文件路徑
設置方法1:命令式
set log_query_time=1
set slow_query_log=on //設置慢查詢開關
set slow_query_log_file='/data/slow_log' //設置慢查詢日誌文件路徑
設置方法2:修改配置文件參數
vim /etc/my.cnf
[mysqld]
log_query_time=1
slow_query_log=on //設置慢查詢開關
slow_query_log_file='/data/slow_log'
MYSQL的一些狀態查詢
狀態或參數查詢
1、show status;
2、show variables;
show variables like ‘%character%’; //查看mysql字符集
3、show processlist; //查看mysql正在執行的操作
參數修改
1、set global variables=?
例如: set global general_log = on;