mysql 主从
Posted Microtiger
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 主从相关的知识,希望对你有一定的参考价值。
原理:slave 的i/o thread ,不断的去master抓取 bin_log, 写入到本地relay_log 然后sql thread不断的更新slave的数据
把主服务器所有的数据复制给从服务器
slave_sql_running 主从的sql进程
slave_io_running 主从的io进程
seconds_behind_master 主从的数据延时
主从步骤
1.数据库2边同步,设置my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format=mixed
server-id = 1
expire_logs_days = 10
log-bin=master-bin
log-bin-index=master-bin.index
binlog_ignore_db=mysql
binlog_ignore_db=infomation_schema
binlog_ignore_db=performance_schema
2.在master上建立mysql用户,给slave用
created user \'ruser\'@\'%\' indentified by \'ruserpwd\' 建立用户
grant replication slave on *.* to \'ruser\'@\'%\' 用户授权
第二种方法:grant replication client,replication slave on *.* to \'ruser\'@\'192.168.%.%\' identified by \'密码123\'
格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by “密码”;
grant all privileges on *.* to \'root\'@\'%\' identified by \'wangxiaohu\'; 所有权限
flush privileges
reset master; 清空master
reset slave; 清空slave
show master logs; 查看日志
show master status \\G 查看master状态,当前日志,及位置master_log_file,master_log_pos
3.从服务器my.ini 配置
[mysqld]
server-id = 2
expire_logs_days = 10
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
slave 从服务器上登录mysql运行change master 命令
show slave status \\G 查看slave状态
change master to
MASTER_HOST=\'192.168.1.1\' ,
MASTER_USER=\'\' , //主服务器的帐号
MASTER_PASSWORD=\'\',
MASTER_PORT=3306,
MASTER_LOG_FILE=\'mysql-bin.000001\',
MASTER_LOG_POS=0;
4.start slave;
主主复制时的主键冲突解决
设置my.cnf里面的2个参数auto_increment_increment,auto_increment_offset
让1台服务器 1,3,5,7来增长
另1台服务器 2,4,6,8来增长
一台服务器:
set global auto_increment_increment = 2; // 全局
set global auto_increment_offset = 1;
set session auto_increment_increment = 2; //当次连接
set session auto_increment_offset = 1;
另一台服务器:
set global auto_increment_increment = 2;
set global auto_increment_offset = 2;
set session auto_increment_increment=2;
set session auto_increment_offset = 2;
注:auto-increment-increment 和 auto-increment-offset 要写到配置文件 中,防止下次重启后失效.
有几台服务器,auto_increment_increment就设置几,比如3台服务器,auto_increment_increment=3, 3台服务器的auto_increment_offset依次开始为,1,2,3
备注:
log-slave-updates是为从库的写操作记录binlog
多主互备和主从复制有一些区别,因为多主中的各个库,都可以对服务器有写权限,所以设计到自增长重复问题
可以看出,你的auto_increment字段在不同的服务器之间绝对不会重复,所以Master-Master结构就没有任何问题了。当然,你还可以使用3台,4台,或者N台服务器,只要保证auto_increment_increment = N 再设置一下auto_increment_offset为适当的初始值就可以了,那样,我们的MySQL可以同时有几十台主服务器,而不会出现自增长ID重复。
在这里我们说的是2台MYSQL服务器,你也可以扩展到多台,实现方法类似
A -> B -> C-> D ->A
这样一个环形的备份结构就形成了,最后可要记住 自增长ID(主键)要设计好哦,否则会出错的。
以上是关于mysql 主从的主要内容,如果未能解决你的问题,请参考以下文章