6月28日任务

说明:有不少同学不能一次性把实验做成功,这是因为还不熟悉,建议至少做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主从原理图

使用场景:

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

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

17.2 准备工作

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

启动主上的mysql进程

启动从上的mysql进程

  :: [ERROR] Plugin 'InnoDB' init function returned error.
:: [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 查看错误日志发现问题,删除mysql目录下的ib_logfile0和ib_logfile1两个文件,就可以解决问题了。

17.3 配置主

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

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

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

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

创建用作同步数据的用户

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

17.4 配置从

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

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

增加 server-id=

重启mysql服务

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

[root@jimmylinux- mysql]# msyql -uroot
-bash: msyql: 未找到命令 设置alias即可使用 [root@jimmylinux- mysql]# alias 'mysql=/usr/local/mysql/bin/mysql'
[root@jimmylinux- mysql]# alias 'mysqldump=/usr/local/mysql/bin/mysqldump'

登录mysql创建4个数据库

恢复数据库

登录mysql开始实行主从

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

[root@jimmylinux- mysql]# systemctl stop firewalld

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

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

mysql> unlock tables;  解锁恢复写数据
Query OK, 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 |
+---------------------------+
rows in set (0.00 sec) mysql> select count(*) user;
+------+
| user |
+------+
| |
+------+
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 |
+---------------------------+
rows in set (0.00 sec) mysql> select count(*) user;
+------+
| user |
+------+
| |
+------+
row in set (0.00 sec)

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

从上显示为0

再测试一个删除表的操作

mysql> drop table user;     主上删除user表
Query OK, rows affected (0.01 sec) mysql> select * from user; 从上的表也同样没有了,所以会报错不存在。
ERROR (42S02): Table 'mysql2.user' doesn't exist

最新文章

  1. 窥探Swift编程之错误处理与异常抛出
  2. WCF 中 TCP 与 HTTP 性能简单比较
  3. iphone的click导致div变黑
  4. SAP用户权限解剖及自修改
  5. yii 常用路径
  6. FreeBSD系统更新与软件安装方法
  7. show_space.sql.txt
  8. Window10中利用Windbg与虚拟机(window7)中调试驱动建立方法
  9. Cnm%(个人模版)
  10. session不会过期
  11. ST-LINK V2 DIY笔记(一)
  12. Hibernate注解开发详解
  13. Spring MVC页面重定向
  14. android分包方案
  15. 跨站请求伪造(CSRF)
  16. Python中 各种数字类型的判别(numerica, digital, decimal)
  17. quartz.net实现集群部署的笔记
  18. Android context空指针异常
  19. Android N: jack server failed
  20. python笔记29-队列Queue

热门文章

  1. 前端开发之VSCode扩展
  2. 第二十九章 System V共享内存
  3. NOIP模拟18 T2
  4. Hbase与Oracle的比较
  5. Asp.net Core 系列之--2.ORM初探:Dapper实现MySql数据库各类操作
  6. salesforce lightning零基础学习(十四) Toast 浅入浅出
  7. [UWP]使用CompositionAPI的翻转动画
  8. 开发板,pc,虚拟机三者如何互相ping通
  9. C语言程序设计100例之(8):尼科彻斯定理
  10. python中程序的异常处理