主从复制原理
实质就是通过二进制的sql文件实现主从复制
MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为我再Master端执行了一条SQL命令,那么在Salve端同样会执行一遍,从而达到主从复制的效果。
从库生成两个线程,一个I/O线程,一个SQL线程;
i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
MySql主从复制的作用
故障切换,数据备份,读写分离,集群高可用等
主从复制配置
例:
准备两台服务器
192.168.1.101(master主Mysql))
192.168.1.102(slave从Mysql)
①修改master主Mysql配置文件
vim /etc/my.cnf server_id=101 #服务器id log-bin=mysql-bin #开启日志文件
然后 重启mysql服务
service mysqld restart
②主服务器给从服务器账号授权
GRANT REPLICATION SLAVE ON *.* to 'mastersync'@'%' identified by 'mysql_123456';#mastersync为自定义授权用户名 mastersync为自定义授权密码
然后 navicat连接主mysql
show master status;
查询主mysql的状态 file为日志文件名 position为日志位置行
③修改slave从Mysql配置文件
配置文件位置:
window 上 可以登录到mysql中 使用 show variables like '%data%' 先找到data 存放路径, 一般my.ini 在 data文件的上一级
linux 上 一般在/etc/my.cnf 这个位置
vi /etc/my.cnf server_id=102 log-bin=mysql-bin binlog_do_db=site_test #要同步的数据库
④在从节点配置访问主节点的参数信息 添加 主节点主机,访问主节点的用户名及密码,主节点二进制文件信息
#先停止同步 stop slave #从节点配置访问主节点相关信息 账号密码,主日志文件及日志同步开始行(上面第二步查询主mysql的状态) change master to master_host='192.168.1.101',master_user='mastersync',master_password='mysql_123456', master_log_file='mysql-bin.000001',master_log_pos=13693; #启动开始同步 start slave
然后查看从mysql同步状态
show slave status;
可以看到
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
表示同步成功
最后测试 主mysql数据库添加表添加数据 从mysql数据库刷新对应有相应的信息
主从复制配置成功
附:如何考虑数据库集群时主键自增唯一性?设置步长
show variables like 'auto_incre%'; -- 会话的自增属性值,同show session variables like 'auto_incre%';
#修改会话自增的步长
SET @@auto_increment_increment=2;
#修改会话起始值
SET @@auto_increment_offset=2;
show global variables like 'auto_incre%';
#修改全局自增的步长
SET global auto_increment_increment=2;
#修改全局起始值
SET global auto_increment_offset=1;