时间:2021-07-01 10:21:17 帮助过:20人阅读
首先是Master(主节点)的配置:
#主Master服务器配置:
#*********************master my.ini配置文件开始*****************************************
#路径均为当前服务器的实际路径
basedir = D:\\apps\\mysql-5.6.24-win32
datadir = D:\\apps\\mysql-5.6.24-win32\\data
port = 3306
#生成记录文件位置,同步必须,请勿手动删除,格式位置为 :log-bin=mysql安装路径/log/mysql-bin.log
log-bin=D:\\apps\\mysql-5.6.24-win32\\log\\mysql-bin.log
#服务ID,用于区分服务,范围1~2^32-1,需要与从服务器不同
server_id= 1
#MySQL 磁盘写入策略以及数据安全性
#每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去
innodb_flush_log_at_trx_commit=1
#当sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。
sync_binlog 的默认值是0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
sync_binlog= 1
#同步数据库,如果多库,就以此格式另写几行即可
binlog-do-db=test
#无需同步的数据库,以下几行基本一样,无需改动
binlog-ignore-db = cluster
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
binlog-ignore-db = information_schema
#mysql复制模式,三种:SBR(基于sql语句复制),RBR(基于行的复制),MBR(混合模式复制)
#混合模式复制
binlog_format=MIXED
#binlog过期清理时间
expire_logs_days=7
#binlog每个日志文件大小
max_binlog_size=20M
#*********************master my.ini配置文件结束*****************************************
3.重启mysql服务,mysql命令行执行:
show master status;#记录文件名以及紧跟的当前行数数字
4.创建并授权用户,后两个slave分别是用户名和密码
grant replication slave ,replication client on *.* to slave@‘192.168.1.128‘ identified by "slave"; flush privileges; #权限修改立即生效 flush tables with read lock; #锁定数据库为只读,确保备份数据一致性
5.退出mysql命令行,执行备份命令
#备份当前所有数据库,可以参考备份单库 mysqldump -u root -p --all-databases --master-data > dbdump.sql
6.将sql脚本在从服务器执行
7.从服务器启动slave(前提是配置好从服务器)
8.从服务器启动完毕后关闭表锁
unlock tables;
#从服务器的配置
1.停掉slave服务
service mysqld stop
2.修改配置文件:
vim /etc/my.cnf
#从数据库(Slave)配置:
#***********************************slave my.cnf配置开始******************************
#从库日志记录文件位置或名称前缀
log_bin = /var/lib/mysql/mylogbin.log
#同步日志记录的频率,1为每条都记录,安全但效率低
sync_binlog = 1
#server的id,不能与相同id的mysql主从连接
server-id=2
#从库日志忽略的数据库名称,不记录
#这里记录从库的binlog是为了安全,如果觉得没必要,可以去掉从库binlog的配置
binlog-ignore-db = cluster
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
binlog-ignore-db = information_schema
#此处添加需要同步的数据库名称,那么它会只接收这个数据库的信息,多个数据库需同步按照此格式另写几行即可
#这里同步数据有两种思路,一种是主服务器只发从库需要的,在主库指定;一种是主服务器把所有数据同步过来,从库按需过滤接收
#为了让配置更详细些,此处配置了从库过滤接收的配置
replicate-do-db=test
#忽略接收的库名
replicate-ignore-db = cluster
replicate-ignore-db = mysql
replicate-ignore-db = performance_schema
replicate-ignore-db = information_schema
#跳过所有错误继续
slave-skip-errors=all
#设置延时时间
slave-net-timeout=60
#mysql复制模式,三种:SBR(基于sql语句复制),RBR(基于行的复制),MBR(混合模式复制)
binlog_format=MIXED #混合模式复制
expire_logs_days=7 #binlog过期清理时间
max_binlog_size=20M #binlog每个日志文件大小
#***********************************slave my.cnf配置结束******************************
3.保存退出:wq
4.启动mysqld服务
service mysqld start
5.删除多余数据库,导入数据,删除部分不予演示,sql的位置请自行指定
mysqldump -u root -p < ~/dbdump.sql #这里演示就是上传到了root的根目录,具体请使用“find / -name sql脚本名” 命令查询
6.从服务器指定master
CHANGE MASTER TO MASTER_HOST=‘192.168.1.129‘, MASTER_USER=‘slave‘, MASTER_PASSWORD=‘slave‘, MASTER_LOG_FILE=‘mysql-bin.000001‘, MASTER_LOG_POS=593;
注:最后两行是之前在主服务器show master status 所记录的数据
如果之前已经启动了一个slave进程,那么以上的命令会失效,并提示stop slave first,所以先stop slave; 然后重试
7.启动slave
start slave; show slave status\G #注意,没有分号
输出如下,显示两个都为yes即成功,可以测试一下
mysql> show slave status; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.129 Master_User: replication Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 593 Relay_Log_File: mysql-relay-log.000004 Relay_Log_Pos: 441 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 52360 Relay_Log_Space: 597 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 """
8.去主服务器开启表只读锁
unlock tables;
--------------------------------实现部分到此结束--------------------------------------
彻底解除主从复制关系
1)stop slave;
2)reset slave; #或直接删除master.info和relay-log.info这两个文件;
3)修改my.cnf删除主从相关配置参数。
4)Delete FROM user Where User=‘slave‘ and Host=‘192.168.1.128‘;#删除主服务器配置的连接slave用户
本文参考博文列表:
【MySQL】Last_IO_Errno: 1593 server-uuid重复导致slave报错
[实操笔记]MySQL主从同步功能实现
标签:timeout 写的不好 中继 不同的 sqlt dump basedir not targe