MySQL-Replication(数据库复制) 主从复制(也称AB复制) 允许将来自一个MySQL数据库服务器(主服务器)的数据复制到一个或者多个MySQL数据库服务器(从服务器)。复制数据是异步的,从服务器不需要永久连接到主服务器接收主服务器的更新。 MySQL复制的优点: 1、横向扩展,在多个从站之间分配负载以提高性能。这个环境中,所有写入和更新在主服务器上进行,读取在一个或者多个从设备上进行。该模型可以提高写入性能,同时也能提高越来越多的读取速度 2、数据安全性。数据是被复制到从服务器,并且可以暂停,所以可以在从服务器运行备份二不被破坏相应的主数据 3、分析,可以在主服务器上创建实时数据,而分析可以在从服务器上进行,而不影响主服务器性能 4、远程数据分发,可以使用复制为远程服务器创建数据的本地副本,而无需永久访问主服务器 Replcation原理:
主服务器开启一个I/O线程,将自己所有修改的操作全部保存在二进制日志Binary-log里面 从服务器也开启一个I/O线程,通过配置好的用户名和密码,连接到主服务器上面请求读取二进制日志,然后将读取到二进制日志写到本地的一个Realy log(中继日志)里面 从服务器开启一个SQL Thread定时检查Realy log(二进制),如果发现有更新,立马将更新内容在本地数据库上执行一遍
每个从服务器都会收到主服务器二进制日志的全部内容 从服务器设备决定应该执行二进制日志中的那些语句 除非另行指定,否则主从二进制日志中所有事件都会被执行 如果需要,可以将从服务器配置为仅处理一些特定数据库或表的事件
一主多从,应该是多个从从主上面读取二进制日志内容,可以做个调整,将二进制日志只给某一个从,这一个从再开启二进制日志转发给其他从,这样从而保证了主的性能,而且数据之间的延迟也会稍微好一点。
配置Replication 主服务器配置: 1、开启log-bin 编辑配置文件/etc/my.cnf log-bin=/var/log/mysql/mysql-bin server-id=1 2、创建log-bin存储目录以及赋予权限 mkdir -p /var/log/mysql chown mysql:mysql /var/log/mysql 3、重启主服务器 systemctl restartl mysqld 4、创建从服务器连接的用户,在mysql中执行 grant all on . to jqb@’%’ identified by ‘Jqb19910312,’; flush privileges; 从服务器配置: 如果主服务器上有数据做以下操作,主服务器没有数据忽略以下操作: 主服务器上数据库备份:mysqldump -uroot -p’Jqb19910312,’ -A > /tmp/all.sql 主服务器数据库备份传输到从服务器上: scp /tmp/all.sql root@10.3.133.209:/tmp 在从服务器上进行恢复,在数据库里面执行:source /tmp/all.sql 从服务器上配置: 1、配置server-id vim /etc/my.cnf [mysqld] server-id=209 2、重启服务 systemctl restart mysqld 3、进入数据库,编辑slave mysql> change master to -> master_host=‘10.3.133.208’, -> master_user=‘jqb’, -> master_password=‘Jqb19190312,’, -> master_log_file=‘mysql-bin.000001’, -> master_log_pos=585; start slave shwo slave status\G Slave_IO_Running: Yes Slave_SQL_Running: Yes 只要这两个字段后面都是yes就说明主从做好了, 不全是yes的话,看一下用户是否有权限以及slave是否写对,没有写对可以stop slave,reset slave,重新写slave