1)中继数据库,用来把主库的操作中转 过来,然后同步到从库中去
2).中继数据库中是不存储数据的
3).实现方法时把中继数据库的存储引擎 设置成BLACKHOLE
4).在修改存储引擎的时候,需要先关闭日志记录在修改
mysql>set sql_log_bin = off;
mysql>alter table dbName.tbName engine = blackhole;
mysql>set sql_log_bin = on;
如果中继服务器存储引擎修改成 blackhole,那么从服务器只能检测到主服务器的insert操作,不能监控到update和delete操作
我遇到的问题,暂时还不知道原因
服务器 | IP地址 |
---|---|
Master-Server(主服务器) | 192.168.1.60 |
Relay-Server(中继服务器) | 192.168.1.64 |
Slave-Server(从服务器) | 192.168.1.66 |
1)创建数据库
2)在数据库test中创建表user
1)停止MySQL服务
service mysqld stop
2).配置MySql属性文件内容
vi /etc/my.cnf
#开启二进制日志 log-bin=mysql-bin #二进制日志格式 binlog_format=mixed #配置唯一的servier-id server-id=1 #需要同步的二进制数据库名 binlog-do-db= #不同步的二进制数据库名 binlog-ignore-db=information_schema binlog-ignore-db=mysql binlog-ignore-db=personalsite #确保binlog日志写入后与硬盘同步 #使得mysql每次提交事务的时候把二进制日志的内容同步到磁盘上, #即使服务器崩溃也会把时间写入日志文件 #sync-binlog= 0...n #0 表示Filesystem自行决定什么时候来做同步,或者cache满了之后,才同步到磁盘 #n 表示当每进行n次事务提交后,MySQL将进行异常fsync之类的磁盘同步指令, # 来将binglog_cache中的数据强制写入磁盘 sync-binlog=1 #跳过主从复制中遇到的所有错误或指定类型的错误,避免slave复制中断 #slave-skip-errors=1062,1053 #slave-skip-errors=all #slave-skip-errors=ddl_exist_erros |
3).重启MySQL服务
service mysqld start
4).给从服务器创建连接主服务器的用户并授予 REPLIECATION SLAVE权限
create user 'relay'@'192.168.1.64' identified by 'MaryF0315';
grant REPLICATION SLAVE on *.* to 'relay'@'192.168.1.64';
flush privileges;
注意这里的IP地址为中继服务器的IP
5).查看Master状态
show master status;
6).使用xshell连接中继服务器,检验为中继服务器分配的用户是否可以连接主服务的MySql数据库
mysql -urelay -pMaryF0315 -h 192.168.1.60
7.导出要做主从的数据库,把它导入到中继服务器,以及从服务器
#在导出数据库之前,需要锁库
mysql> flush tables with read lock;
#在主服务器导出数据库
mysqldump -uroot -pMaryF6650 -B test > test.sql
#把导出的sql上传到中继服务器
scp test.sql 192.168.1.64:/root/
#把导出的sql上传到从服务器
scp test.sql 192.168.1.66:/root/
#在中继服务器和所有从服务器启动之后,才可以解锁
mysql> unlock tables;
1).把主服务器上传过来的数据库导出dump导入到中继服务器数据库
mysql -uroot -pMaryF6650 < test.sql
2).如果曾经配置过主从服务器,则需要先停止从服务器
mysql> stop slave;
3)停止MySQL服务器
service mysql.server stop
4)编辑/etc/my.cnf文件
vim /etc/my.cnf
#配置唯一的servier-id要保证在这个主从关系中,是唯一的 server-id=2 #中继日志配置 #relay-log=slave-relay-bin #relay-log-index=slave-relay-bin.index #中继数据库需要配置的选项 log-bin = mysql-bin-relay log-slave-updates = 1 |
5).启动MySQL服务器,因为我自己的虚拟机释通过拷贝获取的,所以需要在启动MySQL之前把auto.cnf文件移除或者重命名
cd /var/lib/mysql
mv auto.cnf /var/lib/mysql/auto.cnf.bak
service mysqld start
6)登陆中继服务器数据库
mysql -uroot -pMaryF6650
7) 执行命令,让中继服务器关联上主服务器
mysql> change master to
master_host='192.168.1.60',#主服务器host
master_port=3306,#主服务器端口号
master_user='relay',#主服务器为中继服务器创建的用户名
master_password='MaryF0315',#主服务器为中继服务器创建的用户名配套的密码
master_log_file="mysql-bin-master.000001", --主服务show master status中的信息
master_log_pos = 771; --主服务show master status中的信息,配置0也可以
8).启动从服务器
mysql> start slave;
9)查看从节点状态,只有Slave_IO_Running和Slave_SQL_Running的都正常启动才成功
mysql> show slave status\G;
1)导入从主服务器导出的数据库sql
mysql -uroot -pMaryF6650 < test.sql
2)登陆从服务器数据库,如果曾经配置过从服务器,则需要先停止从服务器,然后停止MYSQL服务器
mysql> stop slave;
mysql> quit;
# service mysqld stop
3)修改my.cnf 文件,添加唯一server-id
vim /etc/my.cnf
#配置唯一的servier-id要保证在这个主从关系中,是唯一的 server-id=3 |
4) 重新启动MYSQL服务器
service mysqld start
5)登陆从服务器mysql数据库,让从服务器关联上中继服务器
a:登陆中继服务器,为从服务器连接中继服务器创建用户
create user 'slave-01'@'192.168.1.66' identified by 'MaryF0315';
grant REPLICATION SLAVE on *.* to 'slave-01'@'192.168.1.66';
flush privileges;
b:在从服务器窗口,检测在中继服务器创建的用户是否可以连接中继服务器的数据库
mysql -uslave-01 -pMaryF0315 -h 192.168.1.64
c:在中继服务器,查看中继服务器主节点状态,然后配置到从服务器上去
d:在从服务器上建立和中继服务器的关联关系
mysql> change master to
master_host='192.168.1.64',#中继服务器host
master_port=3306,#中继服务器端口号
master_user='slave-01',#中继服务器为中继服务器创建的用户名
master_password='MaryF0315',#中继服务器为中继服务器创建的用户名配套的密码
master_log_file="mysql-bin-relay.000003", --中继服务show master status中的信息
master_log_pos = 1047; --中继服务show master status中的信息,配置0也可以
e:启动从服务器
mysql> start slave;
f:查看从节点状态
mysql> show slave status\G;
1) 第一种方法
show master status;
system mysqlbinlog /var/lib/mysql/[binlog日志名称];
2)第二种方法
show master status;
mysqlbinlog /var/lib/mysql/[binlog日志名称] > test.sql;
#然后使用more,less等命令查看test.sql文件
3)第三种方法
#查看binlog日志文件名称
show master status;
#查看binlog日志文件事件开始pos
show binlog events in '[binlog日志名称]';
show binlog events in '[binlog日志名称]' from [binlog日志文件事件开始pos];
遇到的问题: Slave_IO_Running: Connecting
1) 网络不通,或者host错误
2) 用户名密码不对
3) pos不对
开启主从后,会产生大量的binlog日志,占用磁盘空间,可以通过重启master来实现删除binlog日志文件