MySQL主從復制原理

實現mysql主從在線同步

一.工作環境及條件

主數據庫:172.25.0.254

從數據庫:172.25.0.11

操作系統:RHRL7

MySQL版本:mariadb-5.5.35

安裝MYSQL(yum源安裝)

主數據庫

[root@master ~]# yum clean all

[root@master ~]# yum -y install mariadb*

從數據庫

[root@slave ~]# yum clean all

開啟mariadb服務

[root@master ~]# systemctl start mariadb

[root@slave ~]# systemctl start mariadb

關閉防火墻(或者開發防火墻的mysql服務和3306端口)

[root@master ~]# systemctl stop firewalld.service

[root@slave ~]# systemctl stop firewalld.service

二.mysql主從復制配置方法

1.主數據庫

修改主庫my.cnf主要設置個不一樣的ID,以及同步的數據庫的名字和端口號(默認為3306)

[root@slave ~]# vim /etc/my.cnf

在[mysqld]中加入內容如下

server-id=1

log-bin=lhb

port=3306

重啟服務使配置生效

[root@master ~]# systemctl restart mariadb

設置mysql登錄密碼(默認情況下登錄密碼為空)

[root@master ~]# mysqladmin -uroot password '123456'

登錄主庫賦予從庫權限賬號,允許用戶在主庫上讀取日志(用戶名:admin,密碼:123456)

[root@master ~]# mysql -uroot -p123456

在mysql里面輸入

MariaDB [(none)]> grant replication slave on *.* to 'admin'@'172.25.0.254' identified by '123456';

為驗證賬號我們可以在從的機器上用命令作如下測試

[root@slave ~]# mysql -uadmin -p123456 -h 172.25.0.11

顯示主數據看的信息

MariaDB [(none)]> show master status;

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

| File? ? ? | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| lhb.000001 |? ? ? 537 |? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? |

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

1 row in set (0.00 sec)

(記錄File、Position的值,設置從數據庫的時候會用到)

2.從數據庫

修改從數據庫的my.cnf,在[mysqld]如下:

server-id=2

重啟下數據庫

[root@slave ~]# systemctl restart mariadb

設置mysql登錄密碼(默認情況下登錄密碼為空)

[root@slave ~]# mysqladmin -uroot password '123456'

登錄數據庫

[root@slave ~]# mysql -uroot -p123456

在從數據庫上設置同步

MariaDB [(none)]> slave stop;

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

MariaDB [(none)]> change master to master_host='172.25.0.11',master_user='admin',master_password='123456',master_log_file='lhb.000001',master_log_pos=537;

Query OK, 0 rows affected (0.03 sec)

MariaDB [(none)]> slave start;

Query

MariaDB [(none)]> show slave status\G;

看到以下兩行為Yes,表示成功了

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

假如你的Slave_IO_Running:Connecting或者No

那么可能出現以下幾點問題:

1.主從兩個數據庫不通。

2.server-id設置錯誤。

3.position設置錯誤

4.防火墻沒關閉或者沒開放mysql端口

3.測試

在主數據庫上新建數據庫,看看是否會同步。

主數據庫上:

MariaDB [(none)]> show databases;

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

| Database? ? ? ? ? |

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

| information_schema |

| mysql? ? ? ? ? ? ? |

| performance_schema |

| test? ? ? ? ? ? ? |

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

4 rows in set (0.01 sec)

從數據庫上:

MariaDB [(none)]> show databases;

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

| Database? ? ? ? ? |

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

| information_schema |

| mysql? ? ? ? ? ? ? |

| performance_schema |

| test? ? ? ? ? ? ? |

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

4 rows in set (0.01 sec)

主數據庫上創建數據庫并查看

MariaDB [(none)]> create database lhbdb;

Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show databases;? ? ?

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

| Database? ? ? ? ? |

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

| information_schema |

| lhbdb? ? ? ? ? ? ? |

| mysql? ? ? ? ? ? ? |

| performance_schema |

| test? ? ? ? ? ? ? |

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

5 rows in set (0.00 sec)

從庫上查看是否同步

MariaDB [(none)]> show databases;

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

| Database? ? ? ? ? |

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

| information_schema |

| lhbdb? ? ? ? ? ? ? |

| mysql? ? ? ? ? ? ? |

| performance_schema |

| test? ? ? ? ? ? ? |

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

5 rows in set (0.01 sec)

由此可以看到在主數據庫上建立數據庫lhbdb,則表示成功了。^_^^_^^_^

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容