测试mysql主从_MySQL主从介绍、配置主从、测试主从同步

说明:有不少同学不能一次性把实验做成功,这是因为还不熟悉,建议至少做3遍

17.1 MySQL主从介绍

17.2 准备工作

17.3 配置主

17.4 配置从

17.5 测试主从同步

有的同学,遇到主从不能正常同步,提示uuid相同的错误。这是因为克隆机器导致。

https://www.2cto.com/database/201412/364479.html

17.1 MySQL主从介绍

MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的

MySQL主从是基于binlog的,主上须开启binlog才能进行主从。

主从过程大致有3个步骤

1)主将更改操作记录到binlog里

2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里

3)从根据relaylog里面的sql语句按顺序执行

主上有一个log dump线程,用来和从的I/O线程传递binlog

从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地。

MySQL主从原理图

99d3f2ecbccb25b52b8b76f1497a909e.png

使用场景:

第一种、作为单独数据的备份,因为数据很重要,在主上写一份数据,需要单独在存一份数据,只是针对一台主进行读写操作,而从备份的数据就单纯来备份备用着,假如主的主机出现硬件损坏突然宕机,随时可以把从机器启动起来,给客户端提供服务。

第二种、同样也是作为备份,但不仅是备份,web客户端还要在从上面读数据,正常情况下要写到主上,读也是在主上面读,如果主的压力比较大,现在就想在从上面做一个读,那么web服务器就可以在从上面读数据,但是不可以写。(用作存库作为读,减轻主的压力)

17.2 准备工作

把limingsong-001作为主机器,limingsong-002作为从机器,同时把mysql进程启动起来。

启动主上的mysql进程

1437305c337434c11a6e8e5dccc01b48.png

启动从上的mysql进程

9bfa2de7a557b42f6878009aeaaab1b3.png

80e7bfcda1b8f0dd1000821040ab78f7.png

100703 9:28:54 [ERROR] Plugin 'InnoDB'init function returned error.100703 9:28:54 [ERROR] Plugin 'InnoDB' registration asa STORAGE ENGINE failed.

查看错误日志发现问题,删除mysql目录下的ib_logfile0和ib_logfile1两个文件,就可以解决问题了。

051332ca944fb1d439b0c89eebff7f48.png

17.3 配置主

安装并启动好mysql后,修改my.cnf,增加server-id=128和log_bin=jimmy1

9575efe5089722c7216992101a9e5d49.png

修改完配置文件后需要重启mysqld服务

4c4a30a1e482366ced169ba90c2563e1.png

可以查看到在mysql目录下多了2个文件,这2个文件甚至是更多的文件非常重要,是实现主从的根本,如果没这2个文件的话,主从也没办法完成。

5ec3364dc3bfe73f6651fc3a048fdf72.png

备份mysql库并恢复成limingsong数据库作为测试使用

1364a7e7fe17b39574599c8ff6e4514d.png

创建用作同步数据的用户

0dc761958a29d03a1fac9229f3199f6f.png

b624f334e04b5f855f5b2ece1d72314c.png

备份mysql2和test数据库,等会需要把tmp下面所有的sql文件拷贝到从上去。

0e086a05bd664d0d13827a8b90026a9f.png

17.4 配置从

编辑my.cnf配置文件,增加server-id=129,要求和主不一样。

[root@jimmylinux-002 mysql]# vim /etc/my.cnf

增加 server-id=129

重启mysql服务

74c1e7a78d683ac0f275f8f9e26ca99d.png

把主上的sql文件拷贝过来并做一个恢复

35925f4fea767567ce788707f30d3212.png

[root@jimmylinux-002 mysql]# msyql -uroot-bash: msyql: 未找到命令

设置alias即可使用

[root@jimmylinux-002 mysql]# alias 'mysql=/usr/local/mysql/bin/mysql'[root@jimmylinux-002 mysql]# alias 'mysqldump=/usr/local/mysql/bin/mysqldump'

登录mysql创建4个数据库

76a6e0e93797910b1242845438ac7605.png

恢复数据库

e2f806dcabd68cd57ee7be503b26f94b.png

登录mysql开始实行主从

e87537073f7227d0c456f2186a24b70b.png

如果出现Slave_IO_Running: Connecting 的情况,需要把主机器上的firewalld关闭,然后在执行同步即可。

[root@jimmylinux-001 mysql]# systemctl stop firewalld

90b173acdf4db2f5d33b72fd63a52fbd.png

067f63ef847fcf47b737222ebd063404.png

这个时候主从就已经建立起来了,记得要把主机器上面解锁恢复写数据。

[root@jimmylinux-001 mysql]# mysql -uroot -pabcd1234 登录主机器的mysql

mysql>unlock tables; 解锁恢复写数据

Query OK,0 rows affected (0.00 sec)

到此整个主从就已经搭建完成了

17.5 测试主从同步

测试主从同步之前先了解下主、从服务器上面的配置参数

配置文件都是my.cnf

主服务器上

binlog-do-db= //仅同步指定的库

binlog-ignore-db= //忽略指定库

从服务器上

replicate_do_db=replicate_ignore_db=replicate_do_table=replicate_ignore_table=replicate_wild_do_table= //如jimmy.%, 支持通配符%

replicate_wild_ignore_table=

开始测试主、从同步

查看主机器的数据库信息

mysql>use mysql2

Database changed

mysql>show tables;+---------------------------+

| Tables_in_mysql2 |

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

| columns_priv |

| db |

| event |

| func |

| general_log |

| help_category |

| help_keyword |

| help_relation |

| help_topic |

| innodb_index_stats |

| innodb_table_stats |

| ndb_binlog_index |

| plugin |

| proc |

| procs_priv |

| proxies_priv |

| servers |

| slave_master_info |

| slave_relay_log_info |

| slave_worker_info |

| slow_log |

| tables_priv |

| time_zone |

| time_zone_leap_second |

| time_zone_name |

| time_zone_transition |

| time_zone_transition_type |

| user |

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

28 rows in set (0.00sec)

mysql> select count(*) user;+------+

| user |

+------+

| 1 |

+------+

1 row in set (0.00 sec)

查看从机器的数据库信息

mysql>use mysql2

Database changed

mysql>show tables;+---------------------------+

| Tables_in_mysql2 |

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

| columns_priv |

| db |

| event |

| func |

| general_log |

| help_category |

| help_keyword |

| help_relation |

| help_topic |

| innodb_index_stats |

| innodb_table_stats |

| ndb_binlog_index |

| plugin |

| proc |

| procs_priv |

| proxies_priv |

| servers |

| slave_master_info |

| slave_relay_log_info |

| slave_worker_info |

| slow_log |

| tables_priv |

| time_zone |

| time_zone_leap_second |

| time_zone_name |

| time_zone_transition |

| time_zone_transition_type |

| user |

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

28 rows in set (0.00sec)

mysql> select count(*) user;+------+

| user |

+------+

| 1 |

+------+

1 row in set (0.00 sec)

现在要在主上把这个表做一个清空操作

e112eac7a12c960a34fc7e89940c4d5f.png

dfe8703f5b80a211cbf3bd13c14b38c7.png

从上显示为0

7661e97182c3f8dd96ee4f6bd53510dc.png

再测试一个删除表的操作

mysql>drop table user; 主上删除user表

Query OK,0 rows affected (0.01sec)

mysql> select * fromuser; 从上的表也同样没有了,所以会报错不存在。

ERROR1146 (42S02): Table 'mysql2.user' doesn't exist

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值