您好,登錄后才能下訂單哦!
這篇文章主要講解了“MYSQL主從搭建的方法是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“MYSQL主從搭建的方法是什么”吧!
MySQL主從復(fù)制搭建主要步驟有:安裝mysql軟件、Master端配置部署、Slave端配置部署、建立主從同步
應(yīng)用需求:
雙機(jī)熱備提供備份,冗余功能
安裝環(huán)境:
NODE1 主機(jī)名 master IP地址 192.168.159.128
NODE2 主機(jī)名 slave IP地址 192.168.159.129
VIA IP(漂移IP)10.10.10.100
NODE1為主節(jié)點(diǎn),NODE2為從節(jié)點(diǎn),同步的數(shù)據(jù)庫名fire9
在安裝之前請確認(rèn)下面的安裝包不存在
rpm -e mysql-devel-4.1.20-1.RHEL4.1
rpm -e mysql-bench-4.1.20-1.RHEL4.1
rpm -e php-mysql-4.3.9-3.15
rpm -e libdbi-dbd-mysql-0.6.5-10.RHEL4.1
rpm -e mod_auth_mysql-2.6.1-2.2
rpm -e mysql-server-4.1.20-1.RHEL4.1
rpm -e MySQL-python-1.0.0-1.RHEL4.1.i386
rpm -e MyODBC-2.50.39-21.RHEL4.1.i386
rpm -e qt-MySQL-3.3.3-9.3.i386
rpm -e mysqlclient10-devel-3.23.58-4.RHEL4.1.i386
rpm -e mysqlclient10-3.23.58-4.RHEL4.1
rpm -e cyrus-sasl-sql-2.1.19-5.EL4.i386
rpm -e perl-DBD-MySQL-2.9004-3.1.i386
rpm -e mysql-4.1.20-1.RHEL4.1
安裝準(zhǔn)備:我已經(jīng)把相關(guān)的軟件和配置文件都放在工具包里面了
redhat as 4 update4 32位
mysql-5.0.45-linux-i686-icc-glibc23.tar.gz
libnet-1.1.2.1-1.rh.el.um.1.i386.rpm
heartbeat-pils-2.0.4-1.el4.i386.rpm
heartbeat-stonith-2.0.4-1.el4.i386.rpm
heartbeat-2.0.4-1.el4.i386
perl-5.8.8.tar.gz
DBI-1.59.tar.gz
DBD-mysql-4.005.tar.gz
Time-HiRes-01.20.tar.gz
Period-1.20.tar.gz
Convert-BER-1.31.tar.gz
Mon-0.11.tar.gz
mon-0.99.3-47.tar.gz
# tar zxvf mysql-5.0.45-linux-i686-icc-glibc23.tar.gz -C /usr/local/
# cd /usr/local/
# mv mysql-5.0.45-linux-i686-icc-glibc23 mysql
# cd mysql
# groupadd mysql
# useradd -g mysql mysql
#passwd mysql
# ./scripts/mysql_install_db --user=mysql
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chmod +x /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# /etc/rc.d/init.d/mysqld start
注:主從都使用yum install 的方式安裝系統(tǒng)自帶的mysql也可以使用,只是版本會(huì)比較低
黃色部分為新添加
vi /etc/my.cnf
[mysqld]
server-id=101
log-bin=/var/lib/mysql/mysql-bin.log
log-bin-index=/var/lib/mysql/mysql-bin.index
expire_logs_days=30
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
說明:
log-bin :給出二進(jìn)制日志的所有文件基礎(chǔ)名
log-bin-index :給出二進(jìn)制日志文件的文件名,通常以000001開始,順序遞增。全名:master-bin.000001
server-id :mysql服務(wù)器唯一ID,在主從復(fù)制的所有服務(wù)器中必須唯一。
create user repl_user;
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY PASSWORD '******';
設(shè)置密碼時(shí)會(huì)遇到報(bào)錯(cuò):
ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number
解決辦法:用select password('你想輸入的密碼');查詢出你的密碼對應(yīng)的字符串
select password('123456');
查出的是*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';
a、配置參數(shù):[mysqld]黃色部分為新添加 vi /etc/my.cnf [mysqld] server-id=102 log-bin=/var/lib/mysql/mysql-relay-bin.log log-bin-index=/var/lib/mysql/mysql-relay-bin.index relay_log_purge=on datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid |
(重建備庫也是使用該方法)
建立主從同步可以從主庫上導(dǎo)出數(shù)據(jù),也可以從已有的從庫上導(dǎo)出數(shù)據(jù),然后再導(dǎo)入到新的從庫中,change master to建立同步。
在主庫上導(dǎo)出數(shù)據(jù):
mysqldump -u***-p***-S /data/mysql6001/mysql.sock --default-character-set=utf8 –q --single-transaction --master-data-A > /tmp/all_database.sql
(或者)在從庫上導(dǎo)出數(shù)據(jù):
mysqldump -u***-p***-S /data/mysql6001/mysql.sock --default-character-set=utf8 -q --single-transaction --dump-slave-A > /tmp/all_database.sql
NOTES:
--master-data和--dump-slave導(dǎo)出的備份中,會(huì)包含master_log_file和master_log_pos信息。
例子:
mysqldump -uroot --events --all-databases > /opt/mysql.dump
mysql -u*** -p*** --default-character-set=utf8< all_database.sql
例子:
mysql -uroot <mysql.dump</mysql.dump<>
以下為建立主從同步最基本的6個(gè)項(xiàng):change master to master_host='xxx.xxx.xxx.xxx', # 主庫IP master_port=6001, # 主庫mysqld的端口 master_user='repl', # 主庫中創(chuàng)建的有REPLICATION SLAVE權(quán)限的用戶 master_password='xxxxxxxx', # 該用戶的密碼 master_log_file='mysql-bin.000xxx', # 已在導(dǎo)入時(shí)指定了 master_log_pos=xxxxxx; #已在導(dǎo)入時(shí)指定了 |
start slave;
例子: master_log_file和master_log_pos通過在主庫上使用命令獲得: show master status \G; 在從庫上執(zhí)行: change master to master_host='192.168.159.128', master_port=3306, master_user='repl_user', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=1071; start slave;
|
主庫查看show master status\G File: mysql-bin.000303 Binlog_Do_DB: show master status\G Position: 18711563 |
從庫: Master_Log_File: mysql-bin.000303--IO_threadRead_Master_Log_Pos: 18711563--IO_threadRelay_Master_Log_File: mysql-bin.000303--sql_threadExec_Master_Log_Pos: 18711163--sql_thread<span "="" > |
Last_SQL_Errno: 1062
Last_SQL_Error: Error 'Duplicate entry '1' for key 'PRIMARY'' on query. Default database:
'test'. Query: 'insert into test values(1,2,3,4,5,6)'
140828 16:27:51 [ERROR] Slave SQL: Error 'Duplicate entry '1' for key 'PRIMARY'' on query.
Default database: 'test'. Query: 'insert into test values(1,2,3,4,5,6)',
Error_code: 1062
140828 16:27:51 [Warning] Slave: Duplicate entry '1' for key 'PRIMARY' Error_code: 1062
140828 16:27:51 [ERROR] Error running query, slave SQL thread aborted. Fix the problem,
and restart the slave SQL thread with "SLAVE START". We stopped at log
'mysql-bin.000303' position 18711163
根據(jù)這些報(bào)錯(cuò)信息,往往就能夠定位到發(fā)生異常的原因。如果我們了解產(chǎn)生異常的具體事件,而且能夠掌控,可以通過設(shè)置sql_slave_skip_counter參數(shù)來跳過當(dāng)前錯(cuò)誤。set global sql_slave_skip_counter=1;
a、直接set global sql_slave_skip_counter=n;(n設(shè)置很大的值,即:跳過所有錯(cuò)誤),
b、設(shè)置slave_skip_errors=all;跳過所有類型的錯(cuò)誤
c、直接查看主庫的binlog,然后在從庫上直接執(zhí)行change master to。
這些方法都會(huì)導(dǎo)致主從數(shù)據(jù)不一致。
如果發(fā)現(xiàn)從庫與主庫差異太大,無法通過手動(dòng)操作或數(shù)據(jù)修改重新建立同步??梢詤⒖忌鲜?strong>"MySQL主從復(fù)制搭建"重新搭建從庫。
主從復(fù)制延遲,可能的原因有:
a、主從同步延遲與系統(tǒng)時(shí)間的關(guān)系,查看主從兩臺機(jī)器間系統(tǒng)時(shí)間差
b、主從同步延遲與壓力、網(wǎng)絡(luò)、機(jī)器性能的關(guān)系,查看從庫的io,cpu,mem及網(wǎng)絡(luò)壓力
c、主從同步延遲與lock鎖的關(guān)系(myisam表讀時(shí)會(huì)堵塞寫),盡量避免使用myisam表。一個(gè)實(shí)例里面盡量減少數(shù)據(jù)庫的數(shù)量。
d、主從復(fù)制發(fā)生異常而中斷,過很久之后才發(fā)現(xiàn)復(fù)制異常。可通過查看master與slave的status估算相差的日志。如果相差太大,則可以考慮重做從庫。
MYSQL啟動(dòng)時(shí)報(bào)錯(cuò):
Another MySQL daemon already running with the same unix socket
原因多個(gè)Mysql進(jìn)程使用了同一個(gè)socket。
兩個(gè)方法解決:
第一個(gè)是立即關(guān)機(jī) 使用命令 shutdown -h now 關(guān)機(jī),關(guān)機(jī)后在啟動(dòng),進(jìn)程就停止了。
第二個(gè)直接把mysql.sock文件改名即可。也可以刪除,推薦改名。
然后就可以啟動(dòng)mysql了。
ERROR-2013報(bào)錯(cuò)代碼,可能造成的原因是
[ERROR] Slave I/O: error connecting to master 'repl_user@192.168.159.128:3306' - retry-time: 60 retries: 86400, Error_code: 2013
iptables -F
setenforce 0
Last_IO_Errno: 1045
Last_IO_Error: error connecting to master 'repl_user@192.168.159.128:3306' - retry-time: 60 retries: 86400
必須使用以下方法授權(quán)
select password('123456');
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';
感謝各位的閱讀,以上就是“MYSQL主從搭建的方法是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對MYSQL主從搭建的方法是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。