《MYSQL數據庫linux系統下實現mysql熱備份詳細步驟(mysql主從復制)》要點:
本文介紹了MYSQL數據庫linux系統下實現mysql熱備份詳細步驟(mysql主從復制),希望對您有用。如果有疑問,可以聯系我們。
MYSQL實例主從的作用:
MYSQL實例1.可以當做一種備份方式
MYSQL實例2.用來實現讀寫分離,緩解一個數據庫的壓力
MYSQL實例?MySQL主從備份原理:
MYSQL實例Mysql的主從復制至少是需要兩個Mysql的服務,當然Mysql的服務是可以分布在不同的服務器上,也可以在一臺服務器上啟動多個服務.
MYSQL實例如果想配置成為同一臺上的話,注意安裝的時候,選擇兩個不同的prefix=路徑,同時開啟服務器的時候,端口不能相同.
MYSQL實例(1)首先確保主從服務器上的Mysql版本相同(做主從服務器的原則是,MYSQL版本要相同,如果不能滿足,最起碼從服務器的MYSQL的版本必須高于主服務器的MYSQL版本 )
MYSQL實例(2)在主服務器上,設置一個從數據庫的賬戶,使用REPLICATION SLAVE賦予權限,如:
MYSQL實例'123456';
MYSQL實例Query OK, 0 rows affected (0.13 sec)
MYSQL實例[原理]master 上提供binlog ,
MYSQL實例slave 通過 I/O線程從 master拿取 binlog,并復制到slave的中繼日志中
MYSQL實例slave 通過 SQL線程從 slave的中繼日志中讀取binlog ,然后解析到slave中
MYSQL實例?主從復制大前提
MYSQL實例需要master與slave同步,因為筆者的數據庫數據量不大,所以無需考慮太多,直接把
MYSQL實例master上的data復制到了slave上,但是如果是大的數據量,比如像taobao這個的系統
MYSQL實例實驗環境準備:
MYSQL實例OS: CentOS5.4
MYSQL實例Mysql:Mysql-5.0.41.tar.gz
輔助工具:SSH Secure Shell Client
MYSQL實例兩臺測試IP&服務器:
MYSQL實例?1、首先在Linux環境下分配好磁盤分區以便留足MySQL數據庫的備份空間
MYSQL實例
?2、MySQL數據庫的安裝:
MYSQL實例1>將Mysql-5.0.41.tar.gz通過SSH 工具 上傳到Linux系統的home目錄下
MYSQL實例2>建立MySQL使用者和群組:
MYSQL實例3>解壓縮Mysql-5.0.41.tar.gz源碼包
MYSQL實例4>進入源碼目錄編譯安裝
MYSQL實例5>替換/etc/my.cnf文件,進入源碼包,執行命令
MYSQL實例7>設置給mysql和root用戶設定訪問權限 我們先進入mysql目錄
MYSQL實例8>啟動mysql,進入已經安裝好的目錄
MYSQL實例9>
修改mysql數據庫超級用戶root的缺省密碼:
MYSQL實例關閉mysql服務器
MYSQL實例10>設定開機就啟動mysql,進入源碼目錄下
MYSQL實例# chmod +x /etc/init.d/mysql
# chkconfig --level 345 mysql on
# service mysql restart
Shutting down MySQL. [ 確定 ]
Starting MySQL [ 確定 ]
[root@localhost mysql]#
MYSQL實例到這里MySQL就裝好了.
?
MYSQL實例3、配置MySQL5.0的復制(Replication)功能
MYSQL實例?一.將master設置為只讀.
MYSQL實例mysql> flush tables with read lock;
MYSQL實例二.用master中的data文件夾替換slave中的data文件夾
MYSQL實例比如 用 tar zcvf mysql_data.gz /media/raid10/mysql/3306/data
MYSQL實例然后 mv mysql_data.gz /media/raid10/htdocs/blog/wordpress/
MYSQL實例因為我的 /media/raid10/htdocs/blog/wordpress/ 是 Nginx 的主目錄
MYSQL實例所以可以在 slave上,用wget下載這個文件,然后 解壓,并覆蓋slave上的data文件
MYSQL實例注意:覆蓋之前最好備份源文件
MYSQL實例三.配置master的my.cnf,添加以下內容
MYSQL實例在[mysqld]配置段添加如下字段
MYSQL實例log-bin=/media/raid10/mysql/3306/binlog/binlog //這里寫你的binlog絕對路徑名
MYSQL實例binlog-do-db=blog //需要同步的數據庫,如果沒有本行,即表示同步所有的數據庫
MYSQL實例binlog-ignore-db=mysql //被忽略的數據庫
MYSQL實例這里給出我的my.cnf配置文件
MYSQL實例character-set-server = utf8
MYSQL實例port = 3306
MYSQL實例socket = /tmp/mysql.sock
MYSQL實例[mysqld]
MYSQL實例character-set-server = utf8
MYSQL實例replicate-ignore-db = mysql
MYSQL實例replicate-ignore-db = test
MYSQL實例replicate-ignore-db = information_schema
MYSQL實例user = mysql
MYSQL實例port = 3306
MYSQL實例socket = /tmp/mysql.sock
MYSQL實例basedir = /usr/local/webserver/mysql
MYSQL實例datadir = /media/raid10/mysql/3306/data
MYSQL實例log-error = /media/raid10/mysql/3306/mysql_error.log
MYSQL實例pid-file = /media/raid10/mysql/3306/mysql.pid
MYSQL實例open_files_limit = 10240
MYSQL實例back_log = 600
MYSQL實例max_connections = 5000
MYSQL實例max_connect_errors = 6000
MYSQL實例table_cache = 614
MYSQL實例external-locking = FALSE
MYSQL實例max_allowed_packet = 16M
MYSQL實例sort_buffer_size = 1M
MYSQL實例join_buffer_size = 1M
MYSQL實例thread_cache_size = 300
MYSQL實例#thread_concurrency = 8
MYSQL實例query_cache_size = 20M
MYSQL實例query_cache_limit = 2M
MYSQL實例query_cache_min_res_unit = 2k
MYSQL實例default-storage-engine = MyISAM
MYSQL實例thread_stack = 192K
MYSQL實例transaction_isolation = READ-COMMITTED
MYSQL實例tmp_table_size = 20M
MYSQL實例max_heap_table_size = 20M
MYSQL實例long_query_time = 3
MYSQL實例log-slave-updates
MYSQL實例log-bin = /media/raid10/mysql/3306/binlog/binlog
MYSQL實例binlog-do-db=blog
MYSQL實例binlog-ignore-db=mysql
MYSQL實例?binlog_cache_size = 4M
MYSQL實例binlog_format = MIXED
MYSQL實例max_binlog_cache_size = 8M
MYSQL實例max_binlog_size = 20M
MYSQL實例relay-log-index = /media/raid10/mysql/3306/relaylog/relaylog
MYSQL實例relay-log-info-file = /media/raid10/mysql/3306/relaylog/relaylog
MYSQL實例relay-log = /media/raid10/mysql/3306/relaylog/relaylog
MYSQL實例expire_logs_days = 30
MYSQL實例key_buffer_size = 10M
MYSQL實例read_buffer_size = 1M
MYSQL實例read_rnd_buffer_size = 6M
MYSQL實例bulk_insert_buffer_size = 4M
MYSQL實例myisam_sort_buffer_size = 8M
MYSQL實例myisam_max_sort_file_size = 20M
MYSQL實例myisam_repair_threads = 1
MYSQL實例myisam_recover
MYSQL實例?interactive_timeout = 120
MYSQL實例wait_timeout = 120
MYSQL實例?skip-name-resolve
MYSQL實例#master-connect-retry = 10
MYSQL實例slave-skip-errors = 1032,1062,126,1114,1146,1048,1396
MYSQL實例#master-host = 192.168.1.2
MYSQL實例#master-user = username
MYSQL實例#master-password = password
MYSQL實例#master-port = 3306
MYSQL實例?server-id = 1
MYSQL實例innodb_additional_mem_pool_size = 16M
MYSQL實例innodb_buffer_pool_size = 20M
MYSQL實例innodb_data_file_path = ibdata1:56M:autoextend
MYSQL實例innodb_file_io_threads = 4
MYSQL實例innodb_thread_concurrency = 8
MYSQL實例innodb_flush_log_at_trx_commit = 2
MYSQL實例innodb_log_buffer_size = 16M
MYSQL實例innodb_log_file_size = 20M
MYSQL實例innodb_log_files_in_group = 3
MYSQL實例innodb_max_dirty_pages_pct = 90
MYSQL實例innodb_lock_wait_timeout = 120
MYSQL實例innodb_file_per_table = 0
MYSQL實例?#log-slow-queries = /media/raid10/mysql/3306/slow.log
MYSQL實例#long_query_time = 10
MYSQL實例?[mysqldump]
MYSQL實例quick
MYSQL實例max_allowed_packet = 32M
MYSQL實例四.在master機上為slave機添加一同步帳號
MYSQL實例mysql> flush privileges ;
MYSQL實例五.配置slave的my.cnf,添加以下內容
MYSQL實例注意:
MYSQL實例1.如果mysql是5.5.3-m3 的版本,只需
MYSQL實例在[mysqld]字段下添加如下內容
MYSQL實例server-id=2
MYSQL實例?2.如果是5.0x的版本,需要
MYSQL實例在[mysqld]字段下添加如下內容
MYSQL實例log-bin=mysql-bin //這是同步的binlog,具體以你的binlog為準
MYSQL實例master-host=172.29.141.112
MYSQL實例master-user=admin
MYSQL實例master-password=12345678
MYSQL實例master-port=3306
MYSQL實例master-connect-retry=60 //如果發現主服務器斷線,重新連接的時間差;
MYSQL實例replicate-do-db=blog //同步的數據庫,不寫本行 表示 同步所有數據庫
MYSQL實例replicate-ignore-db=mysql //不需要備份的數據庫
MYSQL實例log-slave-update
MYSQL實例slave-skip-errors
MYSQL實例?我的mysql是5.5.3,這里給出我的slave my.cnf配置文件
MYSQL實例character-set-server = utf8
MYSQL實例port = 3306
MYSQL實例socket = /tmp/mysql.sock
MYSQL實例?
MYSQL實例[mysqld]
MYSQL實例character-set-server = utf8
MYSQL實例replicate-ignore-db = mysql
MYSQL實例replicate-ignore-db = test
MYSQL實例replicate-do-db = blog
MYSQL實例replicate-ignore-db = information_schema
MYSQL實例user = mysql
MYSQL實例port = 3306
MYSQL實例socket = /tmp/mysql.sock
MYSQL實例basedir = /usr/local/webserver/mysql
MYSQL實例datadir = /media/raid10/mysql/3306/data
MYSQL實例log-error = /media/raid10/mysql/3306/mysql_error.log
MYSQL實例pid-file = /media/raid10/mysql/3306/mysql.pid
MYSQL實例open_files_limit = 10240
MYSQL實例back_log = 600
MYSQL實例max_connections = 5000
MYSQL實例max_connect_errors = 6000
MYSQL實例table_cache = 614
MYSQL實例external-locking = FALSE
MYSQL實例max_allowed_packet = 16M
MYSQL實例sort_buffer_size = 1M
MYSQL實例join_buffer_size = 1M
MYSQL實例thread_cache_size = 300
MYSQL實例#thread_concurrency = 8
MYSQL實例query_cache_size = 20M
MYSQL實例query_cache_limit = 2M
MYSQL實例query_cache_min_res_unit = 2k
MYSQL實例default-storage-engine = MyISAM
MYSQL實例thread_stack = 192K
MYSQL實例transaction_isolation = READ-COMMITTED
MYSQL實例tmp_table_size = 20M
MYSQL實例max_heap_table_size = 20M
MYSQL實例long_query_time = 3
MYSQL實例log-slave-updates
MYSQL實例log-bin = /media/raid10/mysql/3306/binlog/binlog
MYSQL實例binlog_cache_size = 4M
MYSQL實例binlog_format = MIXED
MYSQL實例max_binlog_cache_size = 8M
MYSQL實例max_binlog_size = 20M
MYSQL實例relay-log-index = /media/raid10/mysql/3306/relaylog/relaylog
MYSQL實例relay-log-info-file = /media/raid10/mysql/3306/relaylog/relaylog
MYSQL實例relay-log = /media/raid10/mysql/3306/relaylog/relaylog
MYSQL實例expire_logs_days = 30
MYSQL實例key_buffer_size = 10M
MYSQL實例read_buffer_size = 1M
MYSQL實例read_rnd_buffer_size = 6M
MYSQL實例bulk_insert_buffer_size = 4M
MYSQL實例myisam_sort_buffer_size = 8M
MYSQL實例myisam_max_sort_file_size = 20M
MYSQL實例myisam_repair_threads = 1
MYSQL實例myisam_recover
MYSQL實例interactive_timeout = 120
MYSQL實例wait_timeout = 120
MYSQL實例?skip-name-resolve
MYSQL實例#master-connect-retry = 60
MYSQL實例slave-skip-errors = 1032,1062,126,1114,1146,1048,1396
MYSQL實例?#master-host=172.29.141.112
MYSQL實例#master-user = admin
MYSQL實例#master-password = 12345678
MYSQL實例#master-port = 3306
MYSQL實例server-id = 2
MYSQL實例innodb_additional_mem_pool_size = 16M
MYSQL實例innodb_buffer_pool_size = 20M
MYSQL實例innodb_data_file_path = ibdata1:56M:autoextend
MYSQL實例innodb_file_io_threads = 4
MYSQL實例innodb_thread_concurrency = 8
MYSQL實例innodb_flush_log_at_trx_commit = 2
MYSQL實例innodb_log_buffer_size = 16M
MYSQL實例innodb_log_file_size = 20M
MYSQL實例innodb_log_files_in_group = 3
MYSQL實例innodb_max_dirty_pages_pct = 90
MYSQL實例innodb_lock_wait_timeout = 120
MYSQL實例innodb_file_per_table = 0
MYSQL實例#log-slow-queries = /media/raid10/mysql/3306/slow.log
MYSQL實例#long_query_time = 10
MYSQL實例[mysqldump]
MYSQL實例quick
MYSQL實例max_allowed_packet = 32M
MYSQL實例?六.通過查看master的狀態(在master上查看),為配置slave做準備
MYSQL實例ERROR 2006 (HY000): MySQL server has gone away
MYSQL實例No connection. Trying to reconnect...
MYSQL實例Connection id: 13
MYSQL實例Current database: blog
MYSQL實例*************************** 1. row ***************************
MYSQL實例File: binlog.000005
MYSQL實例Position: 592
MYSQL實例Binlog_Do_DB: blog
MYSQL實例Binlog_Ignore_DB: mysql
MYSQL實例1 row in set (0.01 sec)
MYSQL實例ERROR:
MYSQL實例No query specified
MYSQL實例?從上面的信息,可以看出,master現在使用的binlog是binlog.000005,position是592,那么下面的slave配置必須與這個對應.
MYSQL實例?其實binlog.000005是當前master使用的binlog日志文件
MYSQL實例position是當前master使用的binlog.000005日志文件的位置
MYSQL實例簡單理解為master正在使用哪個binlog的哪個數據行(位置).
MYSQL實例
七.如果是5.5.3-m3版本mysql,需要啟動slave后,配置與master相關對應的信息(在slave上配置)
MYSQL實例注意,這個與第六步相對應
MYSQL實例mysql> change master to master_host='172.29.141.112', master_user='admin', master_password='12345678', master_log_file='binlog.000005', master_log_pos=488;
mysql> CHANGE MASTER TO MASTER_CONNECT_RETRY=60;
MYSQL實例?這個與5.0的配置my.cnf作用是一樣的,配置成與master相對應的內容
MYSQL實例主要是配置slave,讓slave知道從master的哪個binlog上的哪個位置復制數據.所以需要知道master的ip,user_name,user_passwd,binlog,binlog_position以及多長時間連接一次master
MYSQL實例?八.開啟slave
MYSQL實例?九.解除master只讀限制,并做測試
MYSQL實例mysql> use blog;
MYSQL實例mysql> create longxibendi ( a int, b int );
MYSQL實例mysql> show tables;
MYSQL實例+-----------------------+
MYSQL實例| Tables_in_blog |
MYSQL實例+-----------------------+
MYSQL實例| longxibendi |
MYSQL實例| wp_commentmeta |
MYSQL實例| wp_comments |
MYSQL實例| wp_links |
MYSQL實例| wp_options |
MYSQL實例| wp_postmeta |
MYSQL實例| wp_posts |
MYSQL實例| wp_term_relationships |
MYSQL實例| wp_term_taxonomy |
MYSQL實例| wp_terms |
MYSQL實例| wp_usermeta |
MYSQL實例| wp_users |
MYSQL實例+-----------------------+
MYSQL實例12 rows in set (0.00 sec)
MYSQL實例?十一.配置過程中,可以用 show slave status/G; 在 slave上
MYSQL實例查看 slave的復制情況
MYSQL實例十二.如果出現什么問題,可能是防火墻的問題
MYSQL實例/etc/init.d/iptables stop 關閉 master 上的防火墻,或者進行相應的配置
MYSQL實例常遇到的錯誤與解決:
MYSQL實例1.[mysql]ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
MYSQL實例這個錯誤,網上有很多說法,其實直接的原因是mysql服務器沒有啟動
MYSQL實例之前我按照5.0x配置master-slave,然后啟動slave,在連接slave,就會報這個錯誤
MYSQL實例后來發現原因是,mysql slave沒有啟動起來,然后去查錯誤日志,發現以下的字段
MYSQL實例110505 02:04:41 mysqld_safe Starting mysqld daemon with databases from /media/raid10/mysql/3306/data
MYSQL實例InnoDB: The InnoDB memory heap is disabled
MYSQL實例InnoDB: Mutexes and rw_locks use InnoDB's own implementation
MYSQL實例110505 2:04:41 InnoDB: highest supported file format is Barracuda.
MYSQL實例110505 2:04:41 InnoDB Plugin 1.0.6 started; log sequence number 44338
MYSQL實例110505 2:04:41 [ERROR] /usr/local/webserver/mysql/libexec/mysqld: unknown variable 'master-connect-retry=60'
MYSQL實例110505 2:04:41 [ERROR] Aborting
MYSQL實例110505 2:04:41 InnoDB: Starting shutdown...
MYSQL實例110505 2:04:43 InnoDB: Shutdown completed; log sequence number 44348
MYSQL實例110505 2:04:43 [Note] /usr/local/webserver/mysql/libexec/mysqld: Shutdown complete
MYSQL實例?110505 02:04:43 mysqld_safe mysqld from pid file /media/raid10/mysql/3306/mysql.pid ended
MYSQL實例110505 02:07:44 mysqld_safe Starting mysqld daemon with databases from /media/raid10/mysql/3306/data
MYSQL實例InnoDB: The InnoDB memory heap is disabled
MYSQL實例InnoDB: Mutexes and rw_locks use InnoDB's own implementation
MYSQL實例110505 2:07:44 InnoDB: highest supported file format is Barracuda.
MYSQL實例110505 2:07:45 InnoDB Plugin 1.0.6 started; log sequence number 44348
MYSQL實例110505 2:07:45 [ERROR] /usr/local/webserver/mysql/libexec/mysqld: unknown variable 'master-host=172.29.141.112'
MYSQL實例110505 2:07:45 [ERROR] Aborting
MYSQL實例
從上面的ERROR,知道 master-connect-retry=60這個my.cnf中的參數有問題,后來從網上搜資料,發現,mysql5.5.3-m3版本不支持這個參數,
MYSQL實例然后我把這個參數注釋掉,又發現不支持這個參數master-host,從上面的ERROR字段可以看出來.后來,就知道,5.5.3-m3不能按5.0.x那樣配置
MYSQL實例原來不需要從my.cnf中配置master相關信息,當然server-id是必須的.其他信息,通過 在命令行中 ,登陸 mysql服務器配置.
MYSQL實例其實server-id的作用是
MYSQL實例第一,標識,區分不同的slave,第二,防止環備份的發生
MYSQL實例?
MYSQL實例2.Last_Error: Last_SQL_Error:等錯誤
MYSQL實例這個是從 slave上,運行 show slave status/G; 得到的.出現這個問題,最根本的原因是,slave 沒有與當前的master的binlog 和binlog的position對應上
MYSQL實例也就是說,slave傳輸的master binlog 不與當前master正使用的binlog以及binlog的行數對應.
MYSQL實例?
MYSQL實例3.[ERROR] Slave I/O: error connecting to master 'admin@172.29.141.112:3306' - retry-time: 60 retries: 86400, Error_code: 2003
MYSQL實例這個就是因為防火墻的問題,所以用 /etc/init.d/iptables stop 關閉防火墻就OK了.
MYSQL實例?
MYSQL實例4.遇到ERROR 2013 (HY000): Lost connection to MySQL server during query錯誤.
在/ect/my.cnf的[mysqld]中添加skip-name-resolve
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/5393.html