mysql:主从复制
程序员文章站
2022-03-28 21:09:02
...
将主数据库的DDL和DML通过二进制日志传到复制服务器上(从服务器),然后对从服务器上的日志做重新执行,
是的从库和主库数据保持同步
1.主库出现问题,可快速切换到从库服务
2.在从库上执行查询,降低主库访问压力
3.在从库执行备份,避免备份期间影响主库服务
mysql实现是异步复制,如果实时性要求高的数据仍需要从主库获得
复制原理:
主库提交事务时,会把数据变更作为时间events记录在二进制文件binlog中
主库推送binlog中的事件到从库的[中继日志]relay log,从库根据中继日志做数据变更操作
3个线程完成主从复制操作,binlogdump线程跑在主库 i/o线程跑在从库 sql线程跑在从库
i/o线程与主库建立连接,主库创建binlogdump线程读取事件并发送给io线程,io线程获取事件数据更新到中继日志中,
从库sql线程读取中继日志中的更新数据库事件并应用
复制方式:
show variables like ‘%binlog_format%'
1.基于语句的复制:
在主服务器上执行的SQL语句,在从服务器上执行同样的语句。
MySQL默认采用基于语句的复制,效率比较高。 一旦发现没法精确复制时会自动选着基于行的复制。
2.基于行的复制:
3.文件复制
=========================================
1.安装mysql
=========================================
MySQL主服务器:192.168.150.135:3306
MySQL备份服务器:192.168.150.136:3306
=========================================
2.新增备份用户
主服务器和备服务器都执行以下命令;
mysql>create user repl;
mysql>grant replication slave,replication client on *.* to repl@'192.168.150.%' identified by '123456';
=========================================
3.配置
主服务器:
修改或增加以下配置
#server_id给数据库服务的唯一标识,一般为服务器Ip的末尾号
server_id=135
log_bin=/Users/samson/log/mysql/mysql-bin.log
log_error=/Users/samson/log/mysql/error.log
查看日志
mysql> SHOW MASTER STATUS;
-----------------------------------------------
备份服务器:
修改或增加以下配置(配置文件my.cnf)
修改或增加以下配置
#135为主服务器的server_id
server_id=136
log_bin=/home/mysql/log/mysql-bin.log
relay_log=/var/lib/mysql/mysql-replay-bin
log_slave_updates=135
read_only=135
-----------------------------------------------
修改完配置后主备服务器均需要重启:
#service mysqld restart
=========================================
4.启动复制
登录备份服务器mysql;
告诉备库如何连接主库并放置其日志文件
mysql>change master to master_host='192.168.150.135',
master_user='repl',
master_log_file='mysql-bin.000001',
master_log_pos=0;
开启复制
mysql>start slave;
查看slave状态信息
mysql>show slave status\G;
看到以下信息算启动复制成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
=========================================
5.测试
任何改变主服务器数据库的操作,都会同步到从服务器上
=========================================
是的从库和主库数据保持同步
1.主库出现问题,可快速切换到从库服务
2.在从库上执行查询,降低主库访问压力
3.在从库执行备份,避免备份期间影响主库服务
mysql实现是异步复制,如果实时性要求高的数据仍需要从主库获得
复制原理:
主库提交事务时,会把数据变更作为时间events记录在二进制文件binlog中
主库推送binlog中的事件到从库的[中继日志]relay log,从库根据中继日志做数据变更操作
3个线程完成主从复制操作,binlogdump线程跑在主库 i/o线程跑在从库 sql线程跑在从库
i/o线程与主库建立连接,主库创建binlogdump线程读取事件并发送给io线程,io线程获取事件数据更新到中继日志中,
从库sql线程读取中继日志中的更新数据库事件并应用
复制方式:
show variables like ‘%binlog_format%'
1.基于语句的复制:
在主服务器上执行的SQL语句,在从服务器上执行同样的语句。
MySQL默认采用基于语句的复制,效率比较高。 一旦发现没法精确复制时会自动选着基于行的复制。
2.基于行的复制:
3.文件复制
=========================================
1.安装mysql
=========================================
MySQL主服务器:192.168.150.135:3306
MySQL备份服务器:192.168.150.136:3306
=========================================
2.新增备份用户
主服务器和备服务器都执行以下命令;
mysql>create user repl;
mysql>grant replication slave,replication client on *.* to repl@'192.168.150.%' identified by '123456';
=========================================
3.配置
主服务器:
修改或增加以下配置
#server_id给数据库服务的唯一标识,一般为服务器Ip的末尾号
server_id=135
log_bin=/Users/samson/log/mysql/mysql-bin.log
log_error=/Users/samson/log/mysql/error.log
查看日志
mysql> SHOW MASTER STATUS;
-----------------------------------------------
备份服务器:
修改或增加以下配置(配置文件my.cnf)
修改或增加以下配置
#135为主服务器的server_id
server_id=136
log_bin=/home/mysql/log/mysql-bin.log
relay_log=/var/lib/mysql/mysql-replay-bin
log_slave_updates=135
read_only=135
-----------------------------------------------
修改完配置后主备服务器均需要重启:
#service mysqld restart
=========================================
4.启动复制
登录备份服务器mysql;
告诉备库如何连接主库并放置其日志文件
mysql>change master to master_host='192.168.150.135',
master_user='repl',
master_log_file='mysql-bin.000001',
master_log_pos=0;
开启复制
mysql>start slave;
查看slave状态信息
mysql>show slave status\G;
看到以下信息算启动复制成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
=========================================
5.测试
任何改变主服务器数据库的操作,都会同步到从服务器上
=========================================