復制表sql,2-16 mysql主從復制

 2023-11-07 阅读 24 评论 0

摘要:? 1. 部署MYSQL主從同步 <M-S> 環境:mysql版本一致,均為5.7.18 ????? master xuegod4? ip? 192.168.10.34?? 數據庫密碼 yourpasswd ????? slave? xuegod5? ip? 192.168.10.35?? 數據庫密碼 yourpasswd 1.1 配置主數據庫xuegod4 1.1.1 創建需要同步的數據

?

1. 部署MYSQL主從同步 <M-S>

環境:mysql版本一致,均為5.7.18

????? master xuegod4? ip? 192.168.10.34?? 數據庫密碼 yourpasswd

????? slave? xuegod5? ip? 192.168.10.35?? 數據庫密碼 yourpasswd

1.1 配置主數據庫xuegod4

1.1.1 創建需要同步的數據庫:

?mysql> create database HA;

?mysql> use HA;

復制表sql,?mysql> create table T1(id int,name varchar(20));

?service mysqld stop

1.1.2 配置my.cnf

vim /etc/my.cnf

log-bin=mysql-bin-master #啟用二進制日志

server-id=1 #本機數據庫ID 標示

binlog-do-db=HA #可以被從服務器復制的庫。二進制需要同步的數據庫名

redis主從復制原理?binlog-ignore-db=mysql #不可以被從服務器復制的庫

?

1.1.3 重啟mysql

service mysqld restart

1.1.4 授權

01. mysql> grant replication slave on *.* to slave@10.10.10.64 identified by "123456";

注:這里如果報錯說密碼太簡單,可以修改密碼策略

mysql> set global validate_password_policy=0

oracle主從復制,授權完后刷新權限:

mysql> flush privileges;

1.1.5 查看狀態信息

mysql> show master status;

?

1.1.6 查看二進制日志

查看mysql數據目錄,yum方式安裝數據目錄為/var/lib/mysql

?

MySQL主從配置、[root@xuegod4 ~]# ls /var/lib/mysql

?

mysql> show binlog events\G

?

復制前要保證同步的數據庫一致

[root@xuegod4 ~]# mysqldump -uroot -pyourpasswd HA >HA.sql?????????? #可以導出數據庫

MySQL復制表。將導出的數據庫傳給從服務器,方法:

[root@xuegod4 ~]# scp HA.sql 192.168.10.35:/root/

1.2 配置從數據庫服務器xuegod5

1.2.1 兩臺數據庫服務器mysql版本要一致

mysql> show variables like '%version%';

?

1.2.2 測試連接到主服務器是否成功

[root@xuegod5 ~]# mysql -uslave -pyourpasswd -h 192.168.10.34

?

mysql主主復制,看不到HA數據庫,是因為只有復制的權限,沒有讀的權限。

1.2.3 導入數據庫,和主數據庫服務器保持一致

mysql> create database HA;

[root@xuegod5 ~]# mysql -uroot -pyourpasswd HA<HA.sql

1.2.4 修改從服務器配置文件

從服務器沒必要開啟bin-log日志

[root@xuegod5 ~]# service mysqld stop

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

mysql mgr?master-host=192.168.10.34?? #指定主服務器IP地址

master-user=slave????????? #指定定在主服務器上可以進行同步的用戶名

master-password=yourpasswd??? #密碼

mysql版本低于5.7版本才需要配置以上三句。5.7版本只需要配置:

server-id=2? #從服務器ID號,不要和主ID相同 ,如果設置多個從服務器,每個從服務器必須有一個唯一的server-id值,必須與主服務器的以及其它從服務器的不相同。

可以認為server-id值類似于IP地址:這些ID值能唯一識別復制服務器群集中的每個服務器實例。

1.2.5 配置從數據庫服務器

mysql?[root@xuegod5 ~]# service mysqld restart???? #重啟mysql服務

mysql>stop slave; #停止slave

mysql> change master to master_host='192.168.10.34',master_user='slave',master_password='yourpasswd';????

mysql> start slave; #啟動slave

mysql> show slave status\G ?#查看狀態

?

Slave_IO_Running :一個負責與主機的io通信

mysql主從復制的理解和搭建?Slave_SQL_Running:負責自己的slave mysql進程

再到主服務器上查看狀態:

mysql> show processlist \G

?

1.3 插入數據測試同步

在主數據庫服務器插入數據:

mysql> insert into T1 value(6,'yehailun');

mysql主從切換步驟、Query OK, 1 row affected (0.05 sec)

在從數據庫服務器上查詢

mysql>? select * from T1;

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

| id?? | name???? |

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

MySQL主從復制原理?|??? 6 | yehailun |

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

1 row in set (0.00 sec)

1.4 排錯

如果遇到主從不同步,看一下主從bin-log的位置,然后再同步。

?

在主服務器上看二進制日志事件列表

mysql主從和集群的區別。mysql> show binlog events \G

從服務器執行MySQL命令下:

mysql> stop slave;

Query OK, 0 rows affected (0.03 sec)

?

mysql> change master to master_log_file='mysql-bin-master.000001',master_log_pos=1117;

數據庫主從復制、Query OK, 0 rows affected (0.04 sec)

#根據上面主服務器的show master status的結果,進行從服務器的二進制數據庫記錄回歸,達到同步的效果

mysql> start slave;

Query OK, 0 rows affected (0.03 sec)

?

mysql> show slave status\G

redis的主從復制,?

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

如果都是yes就代表在同步

?

重啟從服務器,再查看狀態:

cookie和session區別。停止從服務器slave stop;

開啟從服務器slave start;

排錯思路:

1、二進制日志沒有開啟

2、IPTABLES 沒有放開端口

3、對應的主機 IP地址寫錯了

mysql binlog?SQL線程出錯

1、主從服務器數據庫結構不統一

出錯后,數據少,可以手動解決創建插入,再更新slave狀態。

注:如果主上誤刪除了。那么從上也就誤刪除了。 #因此主上要定期做mysqldump備份。

?

2. 部署MYSQL主主雙向主從復制 M-M(恢復快照再實驗)

通過mysql主主:進行mysql 雙向同步數據庫HA的配置

mysql數據庫備份。mysql主:服務端:xuegod4?? IP:192.168.10.34

mysql主:服務端:xuegod5? IP:192.168.10.35

先清空一下二進制日志,mysql> reset master

在上面主從的基礎上進行配置

2.1 創建需要同步的數據庫

?mysql> create database HA;

?mysql> use HA;

?mysql> create table T1(id int,name varchar(20));

?

2.2 配置xuegod4

它有兩種身份:

身份1: xuegod5的主,身份2: xuegod5的從。

2.2.1 修改配置文件

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

server-id = 1

log-bin=mysql-bin-master

binlog-do-db=HA

binlog-ignore-db=mysql?????? #避免同步mysql用戶相關配置

2.2.2 重啟mysql服務

[root@xuegod4 ~]# service mysqld restart

查狀態

mysql> show master status;

?

2.2.3 授權給xuegod5做從

修改密碼策略

mysql> set global validate_password_policy=0;

mysql> grant replication slave on *.* to slave@'192.168.10.35' identified by 'yourpasswd';

?

如果不符合密碼要求報錯修改如下(5.7版本)

mysql> set global validate_password_policy=0; #定義復雜度

mysql> set global validate_password_length=1; #定義長度 默認是8

刷新權限

mysql> flush privileges;

2.3 配置xuegod5

2.3.1 修改配置文件

mysql 5.1的配置

master-host=192.168.1.64 #指定主服務器IP地址

master-user=slave64 #指定定在主服務器上可以進行同步的用戶名

master-password=123456 #密碼

#master-port=3306 可以不寫

replicate-do-db=HA #要復制的數據庫

master-connect-retry=60 #斷點重新連接時間

mysql 5.7配置

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

server-id=2

log-bin=master-bin-slave

binlog-do-db=HA

binlog-ignore-db=mysql

2.3.2 重啟mysql服務

[root@xuegod5 ~]# service mysqld restart

查看狀態;

mysql> show master status;

?

2.3.3 測試一下從帳號登陸是否正常

[root@xuegod5 ~]# mysql -uslave -pyourpasswd -h 192.168.10.34

mysql: [Warning] Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor.? Commands end with ; or \g.

Your MySQL connection id is 5

Server version: 5.7.18-log MySQL Community Server (GPL)

?

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

?

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

?

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

?

mysql>

2.3.4 授權給xuegod4做從

mysql> grant replication slave on *.* to slave@'192.168.10.34' identified by 'yourpasswd';

如果不符合密碼要求報錯修改如下(5.7版本)

mysql> set global validate_password_policy=0; #定義復雜度

mysql> set global validate_password_length=1; #定義長度 默認是8

刷新權限

mysql> flush privileges;

2.4 指定xuegod5的master

mysql> change master to master_host='192.168.10.34',master_user='slave',master_password='yourpasswd';

mysql> start slave;

mysql> show slave status\G

?

2.5 指定xuegod4的master

mysql> change master to master192.168.10.35',master_user='slave',master_password='yourpasswd';

mysql> start slave;

2.6 xuegod4上查看slave的狀態

mysql> show slave status\G

?

2.7 xuegod5上查看slave的狀態

mysql> show slave status\G

?

2.8 插入數據測試

2.8.1 在xuegod4上插入數據,在xuegod5上查看

mysql> use HA

Database changed

mysql> insert into T1 values(1,'zhangsan');

Query OK, 1 row affected (0.02 sec)

?

2.8.2 在xuegod5上插入數據,在xuegod4上查看

mysql> insert into T1 value(2,'lisi');

Query OK, 1 row affected (0.06 sec)

?

注意:這種M-M架構沒有什么好處,他往往給我們產生一種實現了負載均衡的錯覺

3 部署M-S-S模型

環境:

xuegod4? master?? ??mysql5.7.18??? ??192.168.10.34

xuegod5? slave中繼 ?mysql5. 7.18? ????192.168.10.35

xuegod6? slave? ????mysql5. 7.18????? 192.168.10.36

3.1 創建需要同步的數據庫

mysql> create database HA;

mysql> use HA;

mysql> create table T1(id int,name varchar(20));

3.2 部署master xuegod4

3.2.1 授權

修改密碼策略:

mysql> set global validate_password_policy=0;

在主服務上授權用戶:

mysql> grant replication slave on *.* to 'repl'@192.168.10.35 identified by 'yourpasswd';

刷新權限:

mysql> flush privileges;

3.2.2 修改配置

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

server-id = 1

binlog-do-db = HA

log-bin=mysql-bin-master

binlog-ignore-db=mysql

sync-binlog=1

binlog-format=row

重啟服務:

[root@xuegod4 ~]# service mysqld restart

3.2.3 導出主服務器HA完整備份, 拷貝到 中繼 和slave

[root@xuegod4 ~]# mysqldump -uroot -pyourpasswd HA -B>HA.sql?? #使用-B導入數據庫的時候不用新建庫

[root@xuegod4 ~]# scp HA.sql 192.168.10.35:/root

[root@xuegod4 ~]# scp HA.sql 192.168.10.36:/root

3.3 部署slave中繼xuegod5

3.3.1 導入數據庫

mysql> create database HA;

[root@xuegod5 ~]# mysql -uroot -pyourpasswd HA<HA.sql

3.3.2 修改配置

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

server-id=2

binlog-do-db=HA

log-bin=mysql-bin-slave1

binlog-ignore-db=mysql

binlog-format=row

log-slave-updates=1? ?#把它從relay-log當中讀取出來的二進制日志并且這本機上執行的操作也記錄這自己的二進制日志里面,這樣才能使第三臺slave通過中繼slave讀取到相應數據變化

重啟服務:

[root@xuegod5 ~]# service mysqld restart

3.3.3 授權

mysql> change master to master_host='192.168.10.34',master_user='repl',master_password='yourpasswd';

mysql> start slave;

?

查一下狀態:

?

再授權一個用戶給slave(xuegod6)

mysql> set global validate_password_policy=0;?? #修改密碼策略

mysql> grant replication slave on *.* to 'repl'@192.168.10.36 identified by 'yourpasswd';

刷新權限

mysql> flush privileges;

3.3.4 導出數據庫

[root@xuegod5 ~]# mysqldump -uroot -pyourpasswd -B HA>HA2.sql

發送到xuegod6上

?

3.4 部署slave xuegod6

3.4.1 導入數據

[root@xuegod6 ~]# mysql -uroot -pyourpasswd <HA2.sql

3.4.2 修改配置

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

server-id=3

log-bin=mysql-bin-slave2

binlog-format=row

重啟服務:

[root@xuegod6 ~]# service mysqld restart

3.4.3指定slave中繼作為主

mysql> change master to master_host='192.168.10.35',master_user='repl',master_password='yourpasswd';

mysql> start slave;

3.5 從MASTER上插入數據測試

mysql> create table mermber(id int(4) unsigned not null auto_increment,name varchar(20),primary key(id));

mysql> insert into mermber values(1,'天屠'),(2,'孤葉');

?

?

?

?

?

?

?

轉載于:https://www.cnblogs.com/hailun1987/p/6947562.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/167098.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息