:
负载平衡(load balancing)
备份(Backups)
高可用性和容错行 High availability and failover
master将改变纪录到二进制日志(binary log)中(这些纪录叫做二进制日志事宜,binary log events);
slave将master的binary log events拷贝到它的中继日志(relay log);
slave重做中继日志中的事宜,将改变反映它自己的数据。
该历程的第一部门就是master纪录二进制日志。在每个事务更新数据完成之前,master在二日志纪录这些改变。MySQL将事务串行的写入二进制日志,纵然事务中的语句都是交织执行的。在事宜写入二进制日志完成后,master通知存储引擎提交事务。
下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave最先一个事情线程——I/O线程。I/O线程在master上打开一个通俗的毗邻,然后最先binlog dump process。Binlog dump process从master的二进制日志中读取事宜,若是已经跟上master,它会睡眠并守候master发生新的事宜。I/O线程将这些事宜写入中继日志。
SQL slave thread(SQL从线程)处理该历程的最后一步。SQL线程从中继日志读取事宜,并重放其中的事宜而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,以是中继日志的开销很小。
此外,在master中也有一个事情线程:和其它MySQL的毗邻一样,slave在master中打开一个毗邻也会使得master最先一个线程。复制历程有一个很主要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。
Master和slave的MySQL数据库版本同为5.0.18
IP地址:10.100.0.100
mysql > ,RELOAD,SUPER *.*
@’ ’
‘ ’;
password @ =old_password( )
server-id=1
-bin=mysql-bin
server-id:为主服务器A的ID值
-bin:二进制调换日值
log_bin = mysql-bin
server_id = 2
relay_log = mysql-relay-bin
log_slave_updates = 1
read_only = 1
mysql> MASTER_HOST= ,
-> MASTER_USER= ,
-> MASTER_PASSWORD= ,
-> MASTER_LOG_FILE= ,
-> MASTER_LOG_POS= ;
mysql> G
*************************** ***************************
Slave_IO_State:
Master_Host: server1
Master_User: repl
Master_Port:
Connect_Retry:
Master_Log_File: mysql-
Read_Master_Log_Pos:
Relay_Log_File: mysql-relay-
Relay_Log_Pos:
Relay_Master_Log_File: mysql-
Slave_IO_Running:
Slave_SQL_Running:
...omitted...
Seconds_Behind_Master:
mysql> ;
mysql> G
*************************** ***************************
Slave_IO_State: Waiting send
Master_Host: server1
Master_User: repl
Master_Port:
Connect_Retry:
Master_Log_File: mysql-
Read_Master_Log_Pos:
Relay_Log_File: mysql-relay-
Relay_Log_Pos:
Relay_Master_Log_File: mysql-
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...omitted...
Seconds_Behind_Master:
Slave_IO_Running=Yes
Slave_SQL_Running=Yes
mysql> G
*************************** ***************************
:
: root
Host: localhost:
db:
Command:
:
State:
Info:
*************************** ***************************
:
: repl
Host: localhost:
db:
Command: Dump
:
State: Has sent ; waiting for binlog to be updated
Info: NULL
2 rows in ( sec)
mysql> G
*************************** ***************************
:
:
Host:
db:
Command:
:
State: Waiting send
Info:
*************************** ***************************
:
:
Host:
db:
Command:
:
State: Has relay ; waiting for the slave I/O thread to it
Info:
*************************** ***************************
:
: root
Host: localhost:
db:
Command:
:
State:
Info:
( sec)
,,菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。
(1)master的某个时刻的数据快照;
(2)master当前的日志文件、以及天生快照时的字节偏移。这两个值可以叫做日志文件坐标(log file coordinate),由于它们确定了一个二进制日志的位置,你可以用SHOW MASTER STATUS下令找到日志文件的坐标;
(3)master的二进制日志文件。
:
(1)冷拷贝(cold copy)
住手master,将master的文件拷贝到slave;然后重启master。瑕玷很明显。
(2)热拷贝(warm copy)
若是你仅使用MyISAM表,你可以使用mysqlhotcopy拷贝,纵然服务器正在运行。
(3)使用mysqldump
<1>锁表:若是你还没有锁表,你应该对表加锁,防止其它毗邻修改数据库,否则,你获得的数据可以是不一致的。如下:
使用mysqldump来获得一个数据快照可分为以下几步:
<2>在另一个毗邻用mysqldump建立一个你想举行复制的数据库的转储:
<3>对表释放锁。
(Statement-Based Replication)
(Row-Based Replication)
mysql> summary_table(col1, col2, sum_col3)
-> col1, col2, (col3)
-> enormous_table
-> col1, col2;
mysql> enormous_table col1 = ;
(1)mysql-bin.index
(2)mysql-relay-bin.index
.mysql-02-relay-bin.000017
.mysql-02-relay-bin.000018
(3)master.info
.mysql-02-relay-bin.000019
254
mysql-01-bin.000010
286
0
52813
(4)relay-log.info
(Replication Filters)
(1)每个slave只能有一个master;
(2)每个slave只能有一个唯一的服务器ID;
(3)每个master可以有许多slave;
(4)若是你设置log_slave_updates,slave可以是其它slave的master,从而扩散master的更新。
(1)差别的slave饰演差别的作用(例如使用差别的索引,或者差别的存储引擎);
(2)用一个slave作为备用master,只举行复制;
(3)用一个远程的slave,用于灾难恢复;
的Master-Master(Master-Master in Active-Active Mode)
mysql> tbl = + ;
mysql> tbl = * ;
的Master-Master(Master-Master in Active-Passive Mode)
Master –Slaves - Slaves
:
Last_IO_Error: error connecting to master 'repl1@IP:3306' - retry-time: 60 retries
:
mysql> ;
ERROR 1192 (HY000): Can't the given command because you have active an active
:
mysql> master_host=‘IP PASSWD mysql-
ERROR 1198 (HY000): This operation cannot be performed with a running slave; run STOP SLAVE first
:
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids;
these ids must be different replication to work (or the --replicate-same-server-id option must be used on
slave but this does not always make sense; please check the manual before using it).
mysql> show variables like ;
mysql> global server_id=2;
mysql> slave start;
:
:
1、在从库检查slave状态:
2、在主库检查mysql-bin.001574的偏移量位置
tail -10 ./mysql-bin.001574.bak
3、重新设置salve
mysql> master_log_file= ,master_log_pos= ;
mysql> ;
:
第一种:在master上删除一条纪录,而slave上找不到。
stop slave;
global sql_slave_skip_counter=1;
start slave;
第二种:主键重复。在slave已经有该纪录,又在master上插入了统一条纪录。
Duplicate entry '2' for key 'PRIMARY',
Error_code: 1062;
HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000006, end_log_pos 924
第三种:在master上更新一条纪录,而slave上找不到,丢失了数据。
Can't find record in 't1',
Error_code: 1032;
HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000010, end_log_pos 263
t1 ( , );
; sql_slave_skip_counter= ; ;
网友评论