mysql做主从复制配置案例
2019獨角獸企業重金招聘Python工程師標準>>>
? ? ? ? 之前遇到很多問題,幸虧有大家幫忙,都一一解決了,現在記錄如下:
1.準備工作
mysql版本使用的是 mysql-5.5.30-win32.zip
在win下做的測試
解壓,并且復制兩份,如
d:\mysql\mysql1
d:\mysql\mysql2
mysql1做主數據庫,mysql2做從數據庫
在兩個目錄中分別建立ini目錄,并且將my-small.ini文件復制到ini目錄中(這里隨意用一種ini文件,到時候里面可以去修改),并改名為my.ini。
在兩個目錄中分別建立run.bat、stop.bai、restart.bat三個文件,分別用于啟動、停止、重啟mysql。
2.開始配置
修改my.ini文件
進入mysql1目錄,打開ini目錄中的my.ini文件,修改mysql端口為3311。
注意,my.ini文件中要修改的地方有兩處
port = 3311
同理,mysql2目錄里面的ini目錄下的my.ini文件一樣也需要修改,改成3312。
在[mysqld]段中,添加:
server-id = 1
并設置日志文件:
log-bin=d:/mysql/mysql1/log/mysql-bin1.log
log-error=d:/mysql/mysql1/log/mysql-bin1.err
如果你只是需要同步一個數據庫,則設置:
binlog_ignore_db=數據庫名稱
否則不需要添加此行。
在mysql2的my.ini文件的[mysqld]段中,添加:
server-id = 2
修改bat文件
這里給大家參考:
run.bat
@ECHO off?
cls?
color 0A?
ECHO ? ? 歡迎使用鈦元素的windows2000/2003下的啟動MYSQL程序
ECHO ==========================================================?
pause
ECHO 程序運行中,請稍等......
D:\MySQL\mysql1\bin\mysqld.exe --defaults-file=D:\MySQL\mysql1\ini\my.ini
ECHO 啟動成功
ECHO ==========================================================?
ECHO 按任意鍵退出... ?
pause
exit
stop.bat
@ECHO off?
cls?
color 0A?
ECHO ? ? 歡迎使用鈦元素的windows2000/2003下的MYSQL數據庫關閉程序
ECHO ==========================================================?
pause
ECHO 程序運行中,請稍等......
ECHO 正在關閉MYsql程序,請稍后...
D:\MySQL\mysql1\bin\mysqladmin -uroot -p --port=3311 shutdown
ECHO 關閉成功
ECHO ==========================================================?
ECHO 按任意鍵退出... ?
pause
exit
restart.bat
@ECHO off?
cls?
color 0A?
ECHO ? ? 歡迎使用鈦元素的windows2000/2003下的重啟MYSQL程序
ECHO ==========================================================?
pause
ECHO 程序運行中,請稍等......
ECHO 正在關閉MYsql程序,請稍后...
D:\MySQL\mysql1\bin\mysqladmin -uroot -p --port=3311 shutdown
ECHO 關閉成功
ECHO 按任意鍵準備重新啟動MYSQL... ?
pause
D:\MySQL\mysql1\bin\mysqld.exe --defaults-file=D:\MySQL\mysql1\ini\my.ini
ECHO 啟動成功
ECHO ==========================================================?
ECHO 按任意鍵退出... ?
pause
exit
同樣,mysql2目錄中也放一份。
配置之后,運行mysql,不要去馬上操作它(即去使用數據庫),因為我們要保證兩個數據庫獲得一致性的快照,當然,可以用設置讀鎖:
flush tables with read lock;
運行兩個run.bat文件,過一會就可以關閉這兩個命令行窗口了(不會自動關閉)
進入mysql1,添加一個用于復制的賬戶,注意,這里添加的權限有兩個:REPLICATION CLIENT和REPLICATION SLAVE 。
之后,注意,在mysql1數據庫中建立一個新數據庫,如shopdb,并建表。然后在mysql2中也建立這個同名的數據庫,和表(或者復制,如何復制請自己參考其他文檔)。
然后進入mysql2,設置:
CHANGE MASTER TO
-> ? ? MASTER_HOST='master_host_name',
-> ? ? MASTER_USER='replication_user_name',
-> ? ? MASTER_PASSWORD='replication_password',
-> ? ? MASTER_LOG_FILE='recorded_log_file_name',
-> ? ? MASTER_LOG_POS=recorded_log_position;
然后在mysql2上啟動slave:
start slave;
這個時候可以運行show processlist \G查看是否已經連接到mysql1并接受日志。
3 測試
進入mysql1,進入剛剛建立的shopdb數據庫,在建立的表中插入數據
進入mysql2,可以查看是否已經自動復制數據過來。
復制了就是成功了,否則得查看問題所在。
附錄(轉篇很好的資料):
1、出現錯誤提示、
?
Slave I/O: error connecting to master 'backup@192.168.1.x:3306' - retry-time: 60 ?retries: 86400, Error_code: 1045
解決方法
從服務器上刪除掉所有的二進制日志文件,包括一個數據目錄下的master.info文件和hostname-relay-bin開頭的文件。
master.info::記錄了Mysql主服務器上的日志文件和記錄位置、連接的密碼。
?
?2、出現錯誤提示
?
Error reading packet from server: File '/home/mysql/mysqlLog/log.000001' not found (Errcode: 2) ( server_errno=29)
解決方案:
由于主服務器運行了一段時間,產生了二進制文件,而slave是從log.000001開始讀取的,刪除主機二進制文件,包括log.index文件。
3、錯誤提示如下
?
Slave SQL: Error 'Table 'xxxx' doesn't exist' on query. Default database: 't591'. Query: 'INSERT INTO `xxxx`(type,post_id,browsenum) SELECT type,post_id,browsenum FROM xxxx WHERE hitdate='20090209'', Error_code: 1146
解決方法
由于slave沒有此table表,添加這個表,使用slave start 就可以繼續同步。
?
?
4、錯誤提示如下
?
Error 'Duplicate entry '1' for key 1' on query. Default database: 'movivi1'. Query: 'INSERT INTO `v1vid0_user_samename` VALUES(null,1,'123','11','4545','123')'
?
?
Error 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' ' at line 1' on query. Default database: 'club'. Query: 'INSERT INTO club.point_process ( GIVEID, GETID, POINT, CREATETIME, DEMO ) VALUES ( 0, 4971112, 5, '2010-12-19 16:29:28', '
1 row in set (0.00 sec)
?
?Mysql > Slave status\G;
顯示:Slave_SQL_Running 為 NO
解決方法:
Mysql > stop slave;
Mysql > set global sql_slave_skip_counter =1 ;
Mysql > start slave;
5、錯誤提示如下
# show slave status\G;
?
Master_Log_File: mysql-bin.000029
Read_Master_Log_Pos: 3154083
Relay_Log_File: c7-relay-bin.000178
Relay_Log_Pos: 633
Relay_Master_Log_File: mysql-bin.000025
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB: club
Replicate_Ignore_DB:?
Replicate_Do_Table:?
Replicate_Ignore_Table:?
Replicate_Wild_Do_Table:?
Replicate_Wild_Ignore_Table:?
Last_Errno: 1594
Last_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted (you can check this by running 'mysqlbinlog' on the binary log), the slave's relay log is corrupted (you can check this by running 'mysqlbinlog' on the relay log), a network problem, or a bug in the master's or slave's MySQL code. If you want to check the master's binary log or slave's relay log, you will be able to know their names by issuing 'SHOW SLAVE STATUS' on this slave.
Skip_Counter: 0
Exec_Master_Log_Pos: 1010663436
這個問題原因是,主數據庫突然停止或問題終止,更改了mysql-bin.xxx日志,slave服務器找不到這個文件,需要找到同步的點和日志文件,然后chage master即可。
解決方法:
?
?change master to?
?master_host='211.103.156.198',
?master_user='同步帳號',?
?master_password='同步密碼',?
?master_port=3306,?
?master_log_file='mysql-bin.000025',?
?master_log_pos=1010663436;
6、錯誤提示如下
?
Error 'Unknown column 'qdir' in 'field list'' on query. Default database: 'club'. Query: 'insert into club.question_del (id, pid, ques_name, givepoint, title, subject, subject_pid, createtime, approve, did, status, intime, order_d, endtime,banzhu_uid,banzhu_uname,del_cause,qdir) select id, pid, ques_name, givepoint, title, subject, subject_pid, createtime, approve, did, status, intime, order_d, endtime,'1521859','admin0523','無意義回復',qdir from club.question where id=7330212'
1 row in set (0.00 sec)
這個錯誤就說club.question_del 表里面沒有qdir這個字段 造成的加上就可以了~!
在主的mysql : 里面查詢 Desc club.question_del;?
在 錯誤的從服務器上執行 : alter table question_del add qdir varchar(30) not null;
?7、錯誤提示如下
? Slave_IO_Running: NO
?這個錯誤就是IO 進程沒連接上 ?,想辦法連接上把 把與主的POS 號和文件一定要對,然后重新加載下數據。具體步驟:
slave stop;
change master to master_host='IP地址',master_user='club',master_password='mima ',master_log_file='mysqld-bin.000048',MASTER_LOG_POS=396549485;
注:master_log_file='mysqld-bin.000048',MASTER_LOG_POS=396549485;是從主的上面查出 來的 :show master status\G;
LOAD DATA FROM MASTER;?
load data from master;
slave start;
問題解決!
本文出自 “學習要永恒” 博客,請務必保留此出處http://hzcsky.blog.51cto.com/1560073/479476
轉載于:https://my.oschina.net/tielement/blog/127135
總結
以上是生活随笔為你收集整理的mysql做主从复制配置案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦幻模拟战2md最佳转职(《梦幻西游》电
- 下一篇: object-c中归档的用法