MySQL主從複製原理及其配置過程

來源:互聯網
上載者:User

標籤:mysql 同步

一、MySQL複製原理。

二、MySQL複製配置。


一、MySQL複製原理

1.MySQL複製原理圖

650) this.width=650;" src="https://s3.51cto.com/wyfs02/M02/92/F1/wKioL1kFyBLgeajPAABc7idEmSg591.png" title="slave.png" alt="wKioL1kFyBLgeajPAABc7idEmSg591.png" />

複製原理:

Slave啟動IO Thread和SQL Thread

Master啟動DumpThread


1.Slave通過IO Thread向Master的Dump Thread發送請求,Master的Dump Thread請求本地的binlog。

2.Master讀取本地的binlog,並將讀取內容發送給Slave的IO Thread線程。

3.Slave的IO Thread將收到的內容,寫入到本地的relaylog中。

4.Slave的SQL Thread讀取本地的relaylog檔案內容。

5.Slave的SQL Thread將讀取的內容寫入到本機資料庫。

二、MySQL複製配置

1.MySQL複製圖

650) this.width=650;" src="https://s2.51cto.com/wyfs02/M00/92/F3/wKiom1kFzGzS-DjNAAAsVuLIy80870.png" title="slave2.png" alt="wKiom1kFzGzS-DjNAAAsVuLIy80870.png" />

2.配置Master

2.1.修改Master設定檔

vim /etc/my.cnf[mysqld]#開啟二進位記錄檔log-bin = mysql-bin#配置唯一server idserver-id = 1#事務安全sync_master_info = 1sync_binlog = 1 innodb_support_xa = ON

2.2.Master設定檔全文

[client]port  = 3306socket = /tmp/mysql.sock[mysqld]port = 3306socket = /tmp/mysql.sockskip-external-lockingkey_buffer_size = 256Mmax_allowed_packet = 1Mtable_open_cache = 256sort_buffer_size = 1Mread_buffer_size = 1Mread_rnd_buffer_size = 4Mmyisam_sort_buffer_size = 64Mthread_cache_size = 8query_cache_size= 16Mthread_concurrency = 8log-bin=mysql-binbinlog_format=mixedserver-id = 1sync_master_info = 1sync_binlog = 1 innodb_support_xa = ONdatadir = /data/mysql/3306/datainnodb_data_home_dir = /data/mysql/3306/datainnodb_data_file_path = ibdata1:10M:autoextendinnodb_log_group_home_dir = /data/mysql/3306/datainnodb_buffer_pool_size = 256Minnodb_additional_mem_pool_size = 20Minnodb_log_file_size = 64Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 2innodb_lock_wait_timeout = 50innodb_file_per_table = ONskip_name_resolve = ON[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehash[myisamchk]key_buffer_size = 128Msort_buffer_size = 128Mread_buffer = 2Mwrite_buffer = 2M[mysqlhotcopy]interactive-timeout

2.3.建立複製許可權的使用者

MariaDB [(none)]> grant replication slave,replication client on *.* to ‘repl‘@‘192.168.1.5‘ identified by ‘slavepass‘;Query OK, 0 rows affected (0.39 sec)MariaDB [(none)]> flush privileges;Query OK, 0 rows affected (0.06 sec)

3.配置Slave

3.1.修改Slave設定檔

vim /etc/my.cnf[mysqld]#設定唯一IDserver-id = 3 #啟用relay logrelay_log= relay-logrelay_log_index=relay-log.index#事務安全skip_slave_start = ONsync_relay_log = 1sync_relay_log_info = 1

3.3.slave設定檔全文

[client]port            = 3306socket          = /tmp/mysql.sock[mysqld]port            = 3306socket          = /tmp/mysql.sockskip-external-lockingkey_buffer_size = 256Mmax_allowed_packet = 1Mtable_open_cache = 256sort_buffer_size = 1Mread_buffer_size = 1Mread_rnd_buffer_size = 4Mmyisam_sort_buffer_size = 64Mthread_cache_size = 8query_cache_size= 16Mthread_concurrency = 8server-id = 3relay_log= relay-logrelay_log_index=relay-log.indexskip_slave_start = ONsync_relay_log = 1sync_relay_log_info = 1innodb_data_home_dir = /data/mysql/3306/datainnodb_data_file_path = ibdata1:10M:autoextendinnodb_log_group_home_dir = /data/mysql/3306/datainnodb_buffer_pool_size = 256Minnodb_additional_mem_pool_size = 20Minnodb_log_file_size = 64Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 2innodb_lock_wait_timeout = 50innodb_file_per_table = ONskip_name_resolve = ON[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehash[myisamchk]key_buffer_size = 128Msort_buffer_size = 128Mread_buffer = 2Mwrite_buffer = 2M[mysqlhotcopy]interactive-timeout

4.開始複製

4.1.在Master上查看binlog Pos點

MariaDB [(none)]> show master status\G*************************** 1. row ***************************            File: mysql-bin.000008        Position: 652    Binlog_Do_DB: Binlog_Ignore_DB: 1 row in set (0.00 sec)

4.2.在slave上執行同步操作

MariaDB [(none)]> change master to master_host=‘192.168.1.4‘,master_user=‘repl‘,master_password=‘slavepass‘,master_log_file=‘mysql-bin.000008‘,master_log_pos=652;Query OK, 0 rows affected (0.93 sec)

4.3.在slave上啟動slave

MariaDB [(none)]> start slave;Query OK, 0 rows affected (0.02 sec)

4.3.在slave上查看slave狀態

MariaDB [(none)]> show slave status\G*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: 192.168.1.4                  Master_User: repl                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: mysql-bin.000008          Read_Master_Log_Pos: 652               Relay_Log_File: relay-log.000002                Relay_Log_Pos: 537        Relay_Master_Log_File: mysql-bin.000008             Slave_IO_Running: Yes            Slave_SQL_Running: Yes              Replicate_Do_DB:           Replicate_Ignore_DB:            Replicate_Do_Table:        Replicate_Ignore_Table:       Replicate_Wild_Do_Table:   Replicate_Wild_Ignore_Table:                    Last_Errno: 0                   Last_Error:                  Skip_Counter: 0          Exec_Master_Log_Pos: 652              Relay_Log_Space: 829              Until_Condition: None               Until_Log_File:                 Until_Log_Pos: 0           Master_SSL_Allowed: No           Master_SSL_CA_File:            Master_SSL_CA_Path:               Master_SSL_Cert:             Master_SSL_Cipher:                Master_SSL_Key:         Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: No                Last_IO_Errno: 0                Last_IO_Error:                Last_SQL_Errno: 0               Last_SQL_Error:   Replicate_Ignore_Server_Ids:              Master_Server_Id: 1               Master_SSL_Crl:            Master_SSL_Crlpath:                    Using_Gtid: No                  Gtid_IO_Pos:       Replicate_Do_Domain_Ids:   Replicate_Ignore_Domain_Ids:                 Parallel_Mode: conservative1 row in set (0.00 sec)

5.測試同步

5.1.在master建立資料

MariaDB [(none)]> create database ckldb;Query OK, 1 row affected (0.37 sec)MariaDB [(none)]> use ckldb;Database changedMariaDB [ckldb]> create table jone(id int,name varchar(30));Query OK, 0 rows affected (0.29 sec)MariaDB [ckldb]> insert into jone values(1,‘wukaka‘);          Query OK, 1 row affected (0.49 sec)MariaDB [ckldb]> delete from jone;Query OK, 1 row affected (0.09 sec)MariaDB [ckldb]> insert into jone values(1,‘wukaka‘),(2,‘side‘);          Query OK, 2 rows affected (0.06 sec)Records: 2  Duplicates: 0  Warnings: 0MariaDB [ckldb]> select * from jone;+------+--------+| id   | name   |+------+--------+|    1 | wukaka ||    2 | side   |+------+--------+2 rows in set (0.00 sec)

5.2.在slave上查看

MariaDB [(none)]> show databases;+--------------------+| Database           |+--------------------+| ckldb              || information_schema || mysql              || performance_schema || test               |+--------------------+5 rows in set (0.34 sec)MariaDB [(none)]> use ckldb;Database changedMariaDB [ckldb]> show tables;+-----------------+| Tables_in_ckldb |+-----------------+| jone            |+-----------------+1 row in set (0.00 sec)MariaDB [ckldb]> select * from jone;+------+--------+| id   | name   |+------+--------+|    1 | wukaka ||    2 | side   |+------+--------+2 rows in set (0.00 sec)

注意,如果主庫已經運行很久,同步之前最好,備份主庫,記錄binlog Pos點。將備份匯入到slave庫

,然後從binlog Pos開始恢複。

本文出自 “深呼吸再出擊” 部落格,請務必保留此出處http://ckl893.blog.51cto.com/8827818/1920847

MySQL主從複製原理及其配置過程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.