1. 程式人生 > >MySQL主從介紹、準備工作、配置主、配置從、測試主從同步

MySQL主從介紹、準備工作、配置主、配置從、測試主從同步

mysql主從復制

MySQL主從介紹

MySQL主從又叫做Replication、AB復制。簡單講就是A和B兩臺機器做主從後,在A上寫數據,另外一臺B也會跟著寫數據,兩者數據實時同步。MySQL主從是基於binlog的,主上須開啟binlog才能進行主從。

主從過程:

需要保持數據的一致性,才能復制數據

1、主服務器將更改操作記錄到binlog中

2、從服務器將主服務器的binlog事件(SQL語句)同步到本機(從服務器)並記錄在relaylog(中繼日誌)中

3、從服務器根據relaylog裏面的SQL語句按順序執行

說明: 該過程有三個線程,主上有一個log dump線程,用來和從的i/o線程傳輸binlog;從上有兩個線程,其中i/o線程用來同步主的binlog並生成relaylog,另外一個SQL線程用來把relaylog裏面的SQL語句執行。

技術分享圖片


應用的場景:

1、備份重要的數據

2、分擔主庫服務器的讀的壓力,讓從服務器讀,主服務器寫操作


準備工作

主服務器:192.168.3.74 安裝mysql5.6

從服務器:192.168.3.83 安裝mysql5.6


配置主

1、[root@centos7 system]# vi /etc/my.cnf

[mysqld]


server-id=132

log_bin=jacklinux


2、重啟:

[root@centos7 system]# /etc/init.d/mysqld restart

Shutting down MySQL.. SUCCESS!

Starting MySQL.. SUCCESS!

[root@centos7 system]# ls -lt /data/mysql/ #二進制文件,不能查看

-rw-rw---- 1 mysql mysql 19 Nov 22 09:33 jacklinux.index

-rw-rw---- 1 mysql mysql 120 Nov 22 09:33 jacklinux.000001


3、新建一個數據庫為試驗做準備:

[root@centos7 mysql]# mysqldump -uroot -p123456 zrlog > /tmp/zrlog.sql

[root@centos7 mysql]# mysql -uroot -p123456 -e "create database jacktest"

[root@centos7 mysql]# mysql -uroot -p123456 jacktest < /tmp/zrlog.sql


4、創建同步賬號

mysql> grant replication slave on *.* to ‘repl‘@‘192.168.3.83‘ identified by ‘123456‘;

#只給復制權限,對所有庫所有表,ip為從服務器的ip,賬號為repl,密碼:123456

Query OK, 0 rows affected (0.00 sec)


mysql> flush tables with read lock;

#先進行鎖表,等主從服務器數據保持一致,再解鎖表

Query OK, 0 rows affected (0.00 sec)


mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| jacklinux.000001 | 10989 | | | |

+------------------+----------+--------------+------------------+-------------------+

#需要記錄file、position位置



配置從

1、[root@test ~]# vim /etc/my.cnf

[mysqld]

server-id=130

#必須得和主服務器上的server-id不一樣

2、[root@test ~]# scp 192.168.3.74:/tmp/*.sql .

3、mysql> create database zrlog;

4、恢復數據庫

[root@test ~]# mysql -uroot zrlog < zrlog.sql

實現主從同步:

mysql> stop slave;

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> change master to master_host=‘192.168.3.74‘,master_user=‘repl‘,master_password=‘123456‘,master_log_file=‘jacklinux.000001‘,master_log_pos=10989;

#master_log_file、master_log_pos:主服務器上

mysql> start slave;

mysql> show slave status\G

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

5、解鎖主庫的表(在主上操作):

mysql> unlock tables;

此時主從復制搭建完成,下一步驗證。


測試主從同步

主服務器:

binlog-do-db= 僅同步指定的庫

binlog-ignore-db= 忽略指定的庫


從服務器:

replicate_do_db= 同步指定的庫

replicate_ignore_db= 忽略指定的庫

replicate_do_table= 同步指定的表

replicate_ignore_table= 忽略指定的表


replicate_wild_do_table= 如aming.%,支持通配符

replicate_wild_ignore_table= 忽略

驗證:

主服務器上創建表zrtest,並插入數據

mysql> use zrlog

mysql> create table zrtest(id int);

Query OK, 0 rows affected (0.02 sec)


mysql> desc zrtest;

+-------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| id | int(11) | YES | | NULL | |

+-------+---------+------+-----+---------+-------+

1 row in set (0.01 sec)


mysql> insert zrtest value(1);

Query OK, 1 row affected (0.01 sec)


mysql> insert zrtest value(20);

Query OK, 1 row affected (0.00 sec)


mysql> select * from zrtest;

+------+

| id |

+------+

| 1 |

| 20 |

+------+


從服務器上查看是否有zrtest表,還有數據

mysql> use zrlog;

mysql> select * from zrtest;

+------+

| id |

+------+

| 1 |

| 20 |

+------+


驗證完成,可以同步

本文出自 “探索發現新事物” 博客,請務必保留此出處http://jacksoner.blog.51cto.com/5802843/1983983

MySQL主從介紹、準備工作、配置主、配置從、測試主從同步