mysql主从复制

环境

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 位置之前数据库发生改变

你可能感兴趣的:(mysql主从复制)