MySQL主从
主从简介:
现在数据多,业务量大,一台数据库无法满足,因此需要另一台数据库去同步它,以防止一台数据库资料丢失还有另一台去查看,即主数据库坏了,还有从数据库去查看,因为他们的数据是一样的,这个时候就体现到了主从同步。
1.主从复制=主从同步
2.主从作用
①实时备份,用于故障切换
②读写分离,提供查询服务
③备份,避免影响业务
3.主从形式
①一主一从
②主主复制
③一主多从------即分库分表
④多主一从------即分库分表(mysql 5.7支持)
⑤联级复制(暂时用不上)
什么情况下使用:在写的程序多时用多主一从,在写的少时使用一主多从
4. 主从复制的原理;
通俗理解:就是主库将所有的数据放在他的文件中,从数据库发出请求去读取主库内容,然后把它读取的内容写到自己的文件中
主从复制过程(根据上图描述):1.Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容。
2.Master接收到来自Slave的IO进程的请求后,负责复制的IO进程会根据请求信息读取日志指定位置之后的日志信息,返回给Slave的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置。
3.Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master从何处开始读取日志。
4.Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。
配置时会出现延迟:①可能是网络有问题(交换机采用高级交换机)②主机的配置规格( 内存要高于主数据库,做raid提升写的速率),有延迟是正常的,但是如果延迟一直增长就是有问题。
5.主从复制配置
主从复制步骤:(顺序不能颠倒!)
①确保从数据库与主数据库里面的数据一样
②在主数据库里面创建一个同步账号授权给从数据库使用
③配置主数据库(即修改配置文件)
④配置从数据库(即修改配置文件)
实验操作:
需求:需要搭建两台服务器,一台为主,一台为从主进行写操作,从进行读操作。
1、确保两台服务配置一致此时controller为主,computer为从
2、在主数据库里创建一个同步账号授权给从数据库使用(grant创建,replication复制)
授权后刷新权限
3、配置主数据库
①编辑文件
[[email protected] ~]# vim /etc/my.cnf
编辑配置文件添加以下内容(log-bin是启用binlog日志,server-id表示数据库的唯一标识符,主库的server-id值必须比从库大)
②配置完后重启
[[email protected] ~]# systemctl restart mariadb
③查看主库的状态
MariaDB [(none)]> show master status;
4、配置从数据库
①配置文件
[[email protected] ~]# vim /etc/my.cnf 编辑从数据库 加入以下内容(server-id表示数据库的唯一标识符,relay-log是启用中继日志)
②重启服务
[[email protected] ~]# systemctl restart mariadb
④进入mysql添加以下内容
MariaDB [(none)]> change master to \
-> master_host=‘192.168.86.100’, 地址填主数据库的地址
-> master_user=‘repl’, 填主数据库的使用者
-> master_password=‘123456’, 访问主数据库密码
-> master_log_file=‘mysql_bin_0.000001’, 主数据库的文件名
-> master_log_pos=134; 同步主数据库从什么位置开始,填数字就可以,无需引号,但是最后需要分号
Query OK, 0 rows affected (0.01 sec)
⑤开启主从同步
MariaDB [(none)]> start salve;
MariaDB [(none)]> show slave status\G; 进行查看需要看到
Slave_IO_Running:yes
Slave_SQL_Running:yes
即表示成功
⑥在主库创建新的库,然后看从数据库是否同步
从库上可以看到school即成功