环境
172.16.144.22(master)
172.16.144.168(slave)
系统:centos7.7
创建个数据库,演示对已有的数据进行数据同步
在master中create database wu;
在主服务器开启二进制日志并设置编号
vim /etc/my.cnf.d/server.cnf
[mysqld]
log-bin=master-bin\\开启二进制
log-bin-index=master-bin.index \\二进制索引文件,保存所有binlog文件列表
server-id=1 \\设置服务器唯一编号
sync_binlog=1(确保binlog日志写入以后与硬盘同步)
binlog_format=mixed(bin-log日志文件格式,设置为mixed,可以防止主键重复)
binlog-do-db=zhi(表示同步的库为zhi) #只同步该库
log-bin 不设置的话,默认值 hostname-bin。修改主机名,binlog文件名也会随之改变。但索引文件log-bin-index会获取正确的值。(只是binlog文件序列中途改名会混乱)
log-bin-index 没赋值,默认值与binlog文件同名。索引文件名会随主机名的改变而改变。改变主机名在重启,将找不到索引文件。而认为索引文件不存在,导致二进制日志为空。
service mysql restart
service iptables stop
创建复制账号数据复制时,从服务器都需要使用账户与密码连接MySQL主服务器
且必须有replication slave权限
grant replication slave,replication client on *.* to root@'172.16.144.168 ' identified by 'cnhope';
有replication slave权限能够获取master上的二进制日志,就没啥了。
可执行show master/slave status
从服务器设置服务器编号
vim /etc/my.cnf.d/server.cnf
[mysqld]
#relay-log-index=slave-relay-bin.index
#relay-log=slave-relay-bin //作用跟上面的一样
server-id=2 \\(主机唯一的标识码,不能重复)
log-bin=mysql-bin(开启二进制日志系统)
slave-skip-errors=all(跳过所有的错误,继续执行复制操作)
replicate-do-db=zhi(需要同步的数据库名字,和Master要一致)
获取主服务器二进制日志信息
myql -uroot –pcnhope
flush tables with read lock; \\设置对所有数据库表只读
【图1】
show master status;
unlock tables; \\解锁
1.png
配置从服务器连接主服务器进行数据复制
MariaDB [(none)]>stop slave;
MariaDB [(none)]> change master to
-> master_host=' 172.16.144.22',
-> master_user='wu',
-> master_password='cnhope',
-> master_log_file='Jacob-bin.000004', \\主服务器二进制日志位置
-> master_log_pos=327;
MariaDB [(none)]> start slave; \\开启主从连接
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> show slave status\G; \\查看从服务器状态
2.png
3.png
验证数据同步
在master创建create database zhi; slave同步
Master创建其他库,则不同步
问题
1
在centos7.7版本10.4.10-MariaDB中在/etc/my.cnf填写
[mysql]
log_bin=mysql-bin
log-bin-index=master-bin.index
启动成功但 不生效 mysql时提示该字段不生效
该字段要在/etc/my.cnf.d/server.cnf配置才生效
2
Start slave或者change master to厖报错时
reset slave; 再重新change master to 设置即可
3
vim /etc/my.cnf.d/server.cnf
[mysqld]
datadir=/var/lib/mysql
mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件关闭进程
ps –ef |grep mysql
知识点
优点支持myisam和innodb存储引擎
二进制日志:记录服务器数据库上所有变更。
记录数据库中表的更改(执行完毕的语句才会被写入二进制日志)
show binlog events\G;
或者
show binlog events in 'master-bin.000001'\G
![]()
Log_name:存储事件的文件名(一个事件只能存储在一个文件中)
Pos:事件在文件中的开始位置
Event_type:事件类型
Server_id:创建服务器ID
End_log_pos:事件在文件中的结束位置
Info:事件信息的可读文本前两个组成事件二进制日志位置
当前正在写入的二进制日志文件:
show master status\G
![]()
Stop slave 停止slave
Reset slave 重置slave
flush tables with read lock;
刷新所有表并锁定数据库,防止在检查binlog 位置之前数据库发生改变
网友评论