为了避免单点故障的产生,在分布式应用的部署上,各种节点都应该有复数个。mysql也不应该例外,今天介绍下利用mysql自带的binlog实现的2个mysql同步构建。
1.配置文件
配置文件的内容,主要为开启binlog,自增主键防止冲突等。
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
#========主从复制关键配置======================
server_id=1 #主库和从库需要不一致
log-bin=mysql-bin #二进制文件存放路径,存放在根目录data
auto_increment_increment = 2 #自增ID的步长
auto_increment_offset = 1 #自增ID的起点,另一个要是2
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
slave-skip-errors = all
binlog-ignore-db=mysql
注意另外一个数据库的server_id,auto_increment_offset要不一样。
2.数据库同步
请使用mysqldump,或者一些客户端工具来实现数据的同步。
如果是新建的数据库,那么不需要同步。
3.配置互为主从的关系
进入第一个数据库,输入以下命令,创建供第二个数据库使用的账户。这个语句创建的用户是slave/slave,也只拥有slave的权限。
grant replication slave on *.* to 'slave'@'%' identified by 'slave'
检查第一个数据库master status。
show master status
会显示如下结果,binlog文件,以及这个文件当前语句的位置。
ps:binlog会记录对数据库的每一次更新操作的语句,每次重启数据库会开启新的binlog。
如果上面的结果没有显示,那么说明配置文件可能写错了,或者mysql没有加载到配置文件。
接下来,进入第二个数据库。输入以下命令,把第一个数据库认作master。
change master to master_host='192.168.3.220',master_port=3306,master_user='slave',master_password='slave',master_log_file='mysql-bin.000021 ',master_log_pos=1758522;
然后,启动slave。并检查slave状态。
#启动slave
start slave
#检查slave状态
show slave status
如果以下两个值均为Yes,则启动成功。
如果以上两个值有不是yes的,往后翻,找到 Last_IO_error 或者Last_SQL_error。会告诉你为什么IO失败,为什么SQL失败。
IO的error多半是没有能够链接上主库,可能是网络不通、账户密码错误、binlog的位置错误,等等原因。
SQL的error多半是数据不同步导致的。
那么,现在,第一个数据库是主库,第二个数据库是从库,就建立好了。
接下来只要重复一遍操作,第二个数据库做主库,第一个数据库做从库, 就好了。
这样的互为主从配好以后,任何一个库的改动,都会同步到另一个库。
如果想建立更大的集群,推荐使用PXC的技术。