1. MySQL Implementation of master-slave synchronization
MySQL Master slave synchronization is based on Bin Log Realized , and Bin Log What is recorded is the original SQL sentence .
Bin Log There are three log formats , Sure binlog_format Configuration parameter assignment .
Parameter values | meaning |
---|---|
Statement | Record original SQL sentence , This will cause the update time to be inconsistent with the original database . such as update_time=now() |
Row | Record the changes in each row of data , Ensure that the data is consistent with the original database , The disadvantage is the large amount of data . |
Mixed | Statement and Row Mixed mode of , By default Statement Pattern , Date involved 、 When the function is related, use Row Pattern , It reduces the amount of data , It also ensures data consistency . |
Common master-slave synchronization architectures include one master and multiple slaves 、 Two masters and many subordinates .
2. MySQL The role of master-slave synchronization
- Read / write separation , Improve database performance
- disaster recovery , When the primary server is unavailable , Provide services from the server , Improve availability
- Redundant backup , The primary server data is damaged or lost , Keep backups from the server
One master and many slaves :
Generally, the master database is responsible for all read / write requests , The slave database is only responsible for disaster recovery and redundant backup .
If you do read-write separation , The main library is responsible for writing requests , The slave library is responsible for reading requests , Can improve database performance .
Dual master multi slave architecture :
Generally, it is the main database 1 Responsible for all read and write requests , Main library 2 No external services , Only for disaster recovery .
Compared with the one master multi slave architecture , Dual master multi slave architecture can reduce downtime , Faster recovery of database availability .
3. The principle of active synchronization
When the master database data changes , Write local Bin Log file
Slave Library IO Thread initiation dump Main library Bin Log File request
Main library IO Thread push Bin Log File to and from the library
Slave Library IO Thread Bin Log Content is written locally Relay Log In file
Slave Library SQL Thread reads Relay Log The contents of the document
Slave Library SQL The thread executes again SQL sentence
4. Master slave synchronization delay problem
The most common problem of master-slave synchronization is the delay of master-slave synchronization , You can do this by executing show slave status Command view delay time ,Seconds_Behind_Master Indicates the number of seconds to delay .
What are the reasons for the delay of master-slave synchronization ?
The slave machine has poor performance
The master database is responsible for all read / write requests , The slave library is only used for backup , Be able to use machines with poor performance , The execution time is naturally slow .
The pressure from the reservoir is greater
After the separation of reading and writing , The main library is responsible for writing requests , The slave library is responsible for reading requests .
Internet applications generally have more read requests , So reading from the library is more stressful , Take up more CPU resources .
Network delay
When the main library Bin Log When a file is sent to or from the library , Network delays may occur , It will also cause the data from the database to not keep up .
The main database has large transactions
When a large transaction needs to be executed on the master database 5 minute , hold Bin Log File sent to slave Library , The slave library also needs to perform at least 5 minute , So at this time, the database appears 5 Minute delay .
The solution of master-slave synchronization delay ?
The slave machine has poor performance
Replace the slave library with a machine of the same specification as the master library .
The pressure from the reservoir is greater
Get more slave computers , Share the pressure of reading request .
Network delay
Contact the O & M or cloud service provider for solutions .
The main database has large transactions
Divide large transactions into small ones for execution , Major events will not only cause slave delay , Deadlock may also occur , Reduce database concurrency performance , So try not to use big things .
5. How to improve master-slave synchronization performance
1. Start multi-threaded replication from the library
It is to use multithreading in the last two steps of master-slave synchronization , Modify the configuration slave_parallel_workers=4, Representative opens 4 Copy threads .
2. Modify the synchronization mode , Change to asynchronous
There are three replication methods for master-slave synchronization :
Full synchronous replication
When the main library completes a transaction , And after all slave libraries have executed the transaction , To return success to the client .
Semi-synchronous replication
After at least one execution from the library is completed , It returns success to the client .
Asynchronous replication
After the main database is executed , Return to success immediately , Do not care whether the execution from the library is completed .
If the data security requirements are not so high , You can change the synchronous mode to semi synchronous replication or asynchronous replication .
3. Modify slave Library Bin Log To configure
modify sync_binlog To configure :
sync_binlog=0 , Said to write binlog Do not refresh the disk now , The system decides when to refresh the disk .
sync_binlog=1, Every time binlog Both refresh disks , High safety , Poor performance .
sync_binlog=N, Write N Time binlog To refresh the disk .
The requirements for data security from the database are not so high , You can set sync_binlog=0.
modify innodb_flush_log_at_trx_commit To configure :
innodb_flush_log_at_trx_commit=0, Every second , Flush the transaction log to disk .
innodb_flush_log_at_trx_commit=1, Each transaction is flushed to disk .
innodb_flush_log_at_trx_commit=2, Each transaction does not actively refresh the disk , The system decides when to refresh the disk .
The requirements for data security from the database are not so high , You can set innodb_flush_log_at_trx_commit=2.
Summary of knowledge points :
Articles are constantly updated , You can search through wechat 「 One light architecture 」 Read more technical dry goods for the first time .