目录
1.在主DB上创建用户
2,授权
3,配置主数据库服务器
4,从服务器配置
5.初始化从服务器的数据
5.启动复制链路
如果出现连接不上主库服务器,需要关闭防火墙
6.验证复制效果:
7,优缺点
create user zhaoheng@'192.168.195.%' identified by 'zh179883';
#(允许该用户访问主库和从库,这是一个全局权限,必须对所有数据库设置该权限)
grant replication slave on *.* to zhaoheng@'192.168.195.%';
#开启二进制日志,并指定存储目录(mysql-bin),如果未启动二进制日志,则重启后才能生效
log_bin = /var/lib/mysql/bin-log
#需要指定serverid,在复制集群中必须唯一,建议:server-id 可以用主机ip的后几段
server-id =137(137是主服务器ip_)
binlog_format = row
log_bin = /var/lib/mysql/bin-log
binlog_format = row
server-id=138
relay_log=mysql-relay-bin
#log_slave_update=on
# 安全配置参数,防止从写入
read_only=on
注解:
relay_log 启动了主从复制,该参数就会默认启动,但在默认情况下,参数名字是主机名字,如果因为某种原因更改了主机名的命名策略,这时在启动了从服务器的复制链路的就会报找不到原来的中继日志的错误,从而中断主从复制的链路,所以要更改中继日志的名字,这样就不会造成复制链路的中断了
log_slave_update=on 决定是否要把sql线程存放的中继日志记录到从服务器本机的二进制日志中,如果后续要做链路复制,要把该从服务器作为其他从的主服务器,该参数必须配置
通过主数据库的备份,完成从数据库的初始化
备份方式有两种:
<1>mysql官方提供的工具mysqldump
使用该工具对mysql进行备份时,会把所有的数据库对象找出来存储为一个sql文件
--single-transaction :保证数据事务一致性,需要对数据库加锁,会造成阻塞,这样就会影响数据库的并发性,在使用频繁的系统中,使用这种方法会造成大量的阻塞
--master-data参数,用来记录二进制日志偏移量的信息
--混合使用表的话,则要加上local-tables参数
mysqldump -u root -p --single-transaction --master-data --triggers --routines --all-databases > all.sql
将sql文件传到从库上
scp all.sql [email protected]:/home
从服务器导入数据
mysql -uroot -p
mysqldump -uroot -p --flush-logs --delete-master-logs --all-databases > all.sql
<2>xtrabackup –slave-info 热备工具。
使用innodb存储引擎是不会阻塞服务器的操作,非innodb的表同样会进行锁操作,所以建议只使用innodb的表
--slave-info也可以记录主数据库二进制信息,以及日志数据偏移量的信息
注意:如果主从数据库版本一致,可以备份所有数据库,包括系统数据库,如果不一样,则只备份业务数据库即可,否则会造成未知的bug
主从服务器配置完成后,可以准备启动我们的复制链路了。需要在从服务器上操作
change master to master_host='192.168.195.137',
-> master_user='zhaoheng',
-> master_password='zh179883',
-> MASTER_LOG_FILE='bin-log.000003', MASTER_LOG_POS=120;
最后这句可以在导出的文件中查找。
注解:
master_host主服务器的ip地址
用于数据库复制的用户和密码
MASTER_USER=’repl’,
MASTER_PASSWORD=’PWD’,
备库要从主库的什么位置开始同步二进制日志的文件名和偏移量
MASTER_LOG_FILE=’MYSQL_LOG_FILE_NAME’,
MASTER_LOG_POS=4;
查看复制链路状态(可以看到,复制链路已经好了,但是还没有启动)
show slave status \G
start slave
可以看到,io进程和sql进程已经都启动起来了
从库使用show processlist 查看服务线程。两个关于复制有关的线程,一个IO线程,一个SQL线程。
mysql> show processlist;
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+
| 6 | root | localhost | NULL | Query | 0 | init | show processlist |
| 7 | system user | | NULL | Connect | 114 | Connecting to master | NULL |
| 8 | system user | | NULL | Connect | 114 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL |
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------
数库使用show processlist 查看服务线程
主服务器启动了binlog_dump线程,用于读取主数据库二进制日志信息的
service iptables stop
在主库执行。
1.创建一个表。
2.插入两条记录。
在从服务器上查询。
发现数据同步了。
优点:
1.是mysql最早支持的复制技术,BUG相对较少。
2.对SQL查询没有任何限制。
3.故障处理比较容易。
缺点:
故障转移时重新获取新主的日志点信息比较困难。