MYSQL完全备份、主从复制、级联复制、半同步的知识点总结
本篇内容介绍了“MYSQL完全备份、主从复制、级联复制、半同步的知识点总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
mysql 完全备份
1,启用二进制日志,并于数据库分离,单独存放
vim/etc/my.cnf
添加
log_bin=/data/bin/mysql-bin
创建/data/bin文件夹并授权
chownmysql.mysql/data/bin
2,完成备份数据库
mysqldump-A--single-transaction--master-data=2|xz>/data/all.sql.xz
3,对数据库进行增删改
INSERThellodb.students(stuid,name,gender,age)VALUE(27,'Lujunyi','M',30);
4,停止MySQL
systemctlstopmariadb.service
5,解压备份文件
unxz/data/all.sql.xz
6,查找完全备份时二进制日志的位置
vim/data/all.sqlHANGEMASTERTOMASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=468
7,导出完成备份后的二进制日志
mysqlbinlog--start-position=468/data/bin/mysql-bin.000001>/data/inc.sql
8,还原数据
mysql-e'source/data/all.sql'mysql-e'source/data/inc.sql'
9,验证完成。
误删除的恢复
1,启用二进制日志并与数据库分开存放
vim/etc/my.cnf
添加
log_bin=/data/bin/mysql-bin
创建/data/bin文件夹并授权
chownmysql.mysql/data/bin
2,对数据库进行完全备份
mysqldump-A--single-transaction--master-data=2|xz>/data/all.sql.xz
3,对数据库进行增删改
mysql-e"droptablehellodb.students"mysql-e"inserthellodb.teachersvalue(5,'wangqi',50,'M')"
4,停止服务
systemctlstopmariadb.service
5,删除数据库
rm-rf/var/lib/mysql/*
6,解压备份文件
unxz/data/all.sql.xz
7,查看备份文件,查找二进制节点
vim/data/all.sql--CHANGEMASTERTOMASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=521902;
8,导出二进制日志节点数据
mysqlbinlog--start-position=521902/data/bin/mysql-bin.000004>/data/inc.sql
9,删除二进制日志节点数据中误操作的命令
vim/data/inc.sqlDROPTABLE`hellodb`.`students`/*generatedbyserver*/
10,启动服务
systemctlstartmariadb.service
11.关闭二进制日志记录
mysql-e"SETsql_log_bin=off"
12,导入备份数据
mysql</data/all.sqlmysql</data/inc.sql
13,验证完成。
主从复制
# 主服务器
1,主服务器启用二进制日志,并更改二进制目录
vim/etc/my.cnflog_bin=/data/bin/mysql-binbinlog-format=rowserver-id=1(主从服务器必需保证不同)
更改目录见上面
2,重启服务
servicemysqlrestart
3,创建一个账户用来复制数据的账户
mysql-e'GRANTREPLICATIONSLAVEON*.*TO"repluser"@"172.22.7.%"IDENTIFIEDBY"centos"
4,查看主服务器正在使用的二进制日志
showmasterlogs;+------------------+-----------+|Log_name|File_size|+------------------+-----------+|mysql-bin.000001|14383|+------------------+-----------+1rowinset(0.00sec)
# 从服务器
5,更配置
vim/etc/my.cnfserver-id=2read-only#log-bin=/data/bin/mysql-bin
6,启动服务
servicemysqlrestart
7,关联主服务
MariaDB[(none)]>CHANGEMASTERTOMASTER_HOST='172.22.7.70',MASTER_USER='repluser',MASTER_PASSWORD='centos',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=14383;
8,查看从服务器状态
showslavestatus\G;
9,启动线程
startslave;
#测试
10,增删改主服务器数据,查看从服务器数据是否同步。
主从复制出错的解决-sql_slave_skip_counter
#master服务 ip=172.22.7.70
1,主服务器启用二进制日志,并更改二进制目录
vim/etc/my.cnflog_bin=/data/bin/mysql-binbinlog-format=rowserver-id=1(主从服务器必需保证不同)
更改目录见上面
2,重启服务
servicemysqlrestart
3,创建一个账户用来复制数据的账户
mysql-e'GRANTREPLICATIONSLAVEON*.*TO"repluser"@"172.22.7.%"IDENTIFIEDBY"centos"
4,查看主服务器正在使用的二进制日志
mysql-e'showmasterlogs;'+------------------+-----------+|Log_name|File_size|+------------------+-----------+|mysql-bin.000001|264||mysql-bin.000002|245|+------------------+-----------+
#slave服务 ip=172.22.7.71
5,修改配置文件,启动服务
vim/etc/my.cnf[mysqld]server-id=2read-onlysystemctlstartmariadb
#配置错误master服务信息
6,配置,change master to
CHANGEMASTERTOMASTER_HOST='172.22.7.77',MASTER_USER='wang',MASTER_PASSWORD='lodman',MASTER_PORT=3306,MASTER_LOG_FILE=log-bin.001',MASTER_LOG_POS=4,MASTER_CONNECT_RETRY=10;
7,查看slave 状态
mysql-e'showslavestatus\G'Slave_IO_State:Master_Host:172.22.7.77Master_User:wangMaster_Port:3306Connect_Retry:10Master_Log_File:log-bin.001Read_Master_Log_Pos:4Relay_Log_File:ct7m1-relay-bin.000001Relay_Log_Pos:4Relay_Master_Log_File:log-bin.001Slave_IO_Running:NoSlave_SQL_Running:No·········略
8,启动复制线程
mysql-e'startslave'
9,再次查看slave状态
mysql-e'showslavestatus\G'Slave_IO_State:Master_Host:172.22.7.77Master_User:wangMaster_Port:3306Connect_Retry:10Master_Log_File:log-bin.001Read_Master_Log_Pos:4Relay_Log_File:ct7m1-relay-bin.000001Relay_Log_Pos:4Relay_Master_Log_File:log-bin.001Slave_IO_Running:ConnectingSlave_SQL_Running:Yes·········略
10,master服务增删改数据
11,查看slave服务是否同步,失败!
#解决错误
12,停止并重置slave复制线程服务
mysql-e'stopslave'mysql-e'resetslave'
13,配置正确的change master to 信息
CHANGEMASTERTOMASTER_HOST='172.22.7.70',MASTER_USER='repluser',MASTER_PASSWORD='centos',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=245;
14,查看slave状态
showslavestatus\G;Slave_IO_State:WaitingformastertosendeventMaster_Host:172.22.7.70Master_User:repluserMaster_Port:3306Connect_Retry:10Master_Log_File:mysql-bin.000002Read_Master_Log_Pos:7382Relay_Log_File:ct7m1-relay-bin.000002Relay_Log_Pos:540Relay_Master_Log_File:mysql-bin.000002Slave_IO_Running:YesSlave_SQL_Running:No
15,发现slave状态中Slave_SQL_Running: No ,执行下面命令更为为YES
MariaDB[(none)]>stopslave;QueryOK,0rowsaffected(0.00sec)MariaDB[(none)]>setGLOBALSQL_SLAVE_SKIP_COUNTER=1;QueryOK,0rowsaffected(0.00sec)MariaDB[(none)]>startslave;QueryOK,0rowsaffected(0.03sec)MariaDB[(none)]>showslavestatus\G;***************************1.row***************************Slave_IO_State:WaitingformastertosendeventMaster_Host:172.22.7.70Master_User:repluserMaster_Port:3306Connect_Retry:10Master_Log_File:mysql-bin.000002Read_Master_Log_Pos:7382Relay_Log_File:ct7m1-relay-bin.000003Relay_Log_Pos:540Relay_Master_Log_File:mysql-bin.000002Slave_IO_Running:YesSlave_SQL_Running:Yes·········略
16,查看slave服务数据是否同步
17,同步完成。
Mysql 级联复制
在生产换进中有一种主从复制的方法主节点先将数据同步到一个中间的从节点,然后由从节点给后续的其他从节点来复制数据,这种复制方式称为级联复制。
级联复制的好处是可以极大的减轻主节点的压力
级联复制在配置时需要在中间节点上启用log_slave_updates的选项。
#环境服务器masterslaveslave系统centos7centos7centos7ip172.22.7.70172.22.7.70172.22.7.71
#mater
1,主服务器启用二进制日志,并更改二进制目录
vim/etc/my.cnflog_bin=/data/bin/mysql-binbinlog-format=rowserver-id=1(主从服务器必需保证不同)
更改目录见上面
2,重启服务
servicemysqlrestart
3,创建一个账户用来复制数据的账户
mysql-e'GRANTREPLICATIONSLAVEON*.*TO"repluser"@"172.22.7.%"IDENTIFIEDBY"centos"
4,查看主服务器正在使用的二进制日志
mysql-e'showmasterlogs;'+------------------+-----------+|Log_name|File_size|+------------------+-----------+|mysql-bin.000001|264||mysql-bin.000002|7488||mysql-bin.000003|402|+------------------+-----------+#slave
5,修改配置文件,并创建二进制日志目录
vim/etc/my.cnf[mysqld]log-bin=/data/bin/mysql-binbinlog-format=rowread-onlylog_slave_updatesserver-id=2
更改目录见上
6,启动服务
systemctlrestartmariadb
7,配置change master to信息
CHANGEMASTERTOMASTER_HOST='172.22.7.70',MASTER_USER='repluser',MASTER_PASSWORD='centos',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=402;
8,启动slave线程
mysql-e'startslave'
9,查看slave状态
showslavestatus\G;***************************1.row***************************Slave_IO_State:WaitingformastertosendeventMaster_Host:172.22.7.70Master_User:repluserMaster_Port:3306Connect_Retry:60Master_Log_File:mysql-bin.000003Read_Master_Log_Pos:7539Relay_Log_File:ct7m1-relay-bin.000002Relay_Log_Pos:7677Relay_Master_Log_File:mysql-bin.000003Slave_IO_Running:YesSlave_SQL_Running:YesReplicate_Do_DB:
10,在master上增删改数据测试查看
#slave1
11,在slave上将slave上的数据拷贝过来
mysqldump-A--single-transaction-F--master-data=1>/data/all.sqlscp/data/all.sql172.22.7.72:/data
12,slave创建一个账户用来复制数据的账户
mysql-e'GRANTREPLICATIONSLAVEON*.*TO"repluser"@"172.22.7.%"IDENTIFIEDBY"centos"
13,修改slave1配置
vim/etc/my.cnf[mysqld]read-onlyserver-id=3
14,启动服务
systemctlstartmariadb
15,查看slave服务器的二进制日志
mysql-e'showmasterlogs'+------------------+-----------+|Log_name|File_size|+------------------+-----------+|mysql-bin.000001|351||mysql-bin.000002|351||mysql-bin.000003|351||mysql-bin.000004|25552||mysql-bin.000005|586|+------------------+-----------+
16,打开all.sql文件对change master on信息加以修改
CHANGEMASTERTOMASTER_HOST='172.22.7.71',MASTER_USER='repluser',MASTER_PASSWORD='centos',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000005',MASTER_LOG_POS=586;
17,导入slave数据
mysql</data/all.sql
18,启动线程
mysql-e"STARTSLAVE;"
19,查看slave状态
mysql-e"showslavestatus\G;"
20,对master对象增删改操作,查看是否同步
21,同步完成。
MySQL半同步
异步复制是当用户写入一条记录时,先将数据写入到主节点,然后回复用户一个写入成功的消息,然后慢慢的将数据复制到其背后的其他从节点,这样的好处是效率比较高,但是缺点也是非常明显,主服务器和从服务器的延迟过大并且主服务器突然发生异常,此时就会造成数据的丢失。
同步复制是当用户写入一条记录时,主节点将数据写入数据库,然后将数据复制给其后面的其他从节点,当所有的从节点返回数据复制成功后,主节点再回复用户数据接入成功的消息,这样做的好处是,确保了数据的安全性,但损失了效率。
半同步复制是间于同步复制和异步复制之间的一种复制方法,他的工作原理是:当用户执行写操作时,主节点会将数据发送给其后面的其他从节点,只要有一个从节点返回复制成功的消息,主节点就直接返回写入成功,如果主节点背后的从节点迟迟不返回复制成功消息,此时就会有一个超时时长,一旦达到超时时长,主节点就先返回消息告诉用户复制成功,而后将数据继续给从节点复制。
#配置主从复制 步骤见上。
#配置半同步
##master
1,修改配置文件启用插件
vim/etc/my.cnf[mysqld]log-bin=/data/bin/mariadb-binbinlog-format=rowserver-id=1rpl_semi_sync_master_enabled
2,重启服务,
systemctlrestartmariadb
3,查看插件是否启动
SHOWGLOBALVARIABLESLIKE'%semi%';+------------------------------------+-------+|Variable_name|Value|+------------------------------------+-------+|rpl_semi_sync_master_enabled|ON||rpl_semi_sync_master_timeout|3000||rpl_semi_sync_master_trace_level|32||rpl_semi_sync_master_wait_no_slave|ON|+------------------------------------+-------+4rowsinset(0.00sec)
4,设置超时时长
SETGLOBALrpl_semi_sync_master_timeout=3000;QueryOK,0rowsaffected(0.00sec)
##slave
5,修改配置文件启用插件
vim/etc/my.cnf[mysqld]log-bin=/data/bin/mariadb-binbinlog-format=rowserver-id=2rpl_semi_sync_master_enabled
6,重启服务,
systemctlrestartmariadb
7,查看插件是否启动
SHOWGLOBALVARIABLESLIKE'%semi%';+------------------------------------+--------------+|Variable_name|Value|+------------------------------------+--------------+|rpl_semi_sync_master_enabled|ON||rpl_semi_sync_master_timeout|1000||rpl_semi_sync_master_trace_level|32||rpl_semi_sync_master_wait_no_slave|ON||rpl_semi_sync_master_wait_point|AFTER_COMMIT|+------------------------------------+--------------+5rowsinset(0.00sec)
8,启动复制线程
mysql-e"STARTSLAVE";
9,测试检查
10,同步完成
“MYSQL完全备份、主从复制、级联复制、半同步的知识点总结”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。