主从复制安装
安装的mysql版本需一致
找到mysql配置文件my.cnf,需要修改的配置文件:
1)主从复制需修改或添加配置项如下:
log_bin:开启binlog日志
server_id:服务唯一标识
2)主主除以上配置外,需另加配置如下:
auto_increment_increment:主键步进值
auto_increment_offset:主键起始值
另,由于四台mysql之间的关系是主备的主从复制,为实现A主的从服务可以同步另一主的变化,需开启log-slave-updates配置项。从库开启log-bin参数,如果直接往从库写数据,是可以记录log-bin日志的,但是从库通过I0线程读取主库二进制日志文件,然后通过SQL线程写入的数据,是不会记录binlog日志的。也就是说从库从主库上复制的数据,是不写入从库的binlog日志的。所以从库做为其他从库的主库时需要在配置文件中添加log-slave-updates参数。
(master)配置如下:
[client]
socket=/tmp/mysql.sock
[mysqld]
#开启日志
log_bin
#开启slave更新日志
log-slave-updates
port = 3306
server_id = 1
#步进值auto_imcrement。一般有n台主MySQL就填n,双向主从复制需要
auto_increment_increment = 2
#起始值。一般填第n台主MySQL。此时为第一台主MySQL,双向主从复制需要
auto_increment_offset = 1
#忽略mysql库【我一般都不写】
binlog-ignore-db = mysql
#忽略information_schema库【我一般都不写】
binlog-ignore-db = information_schema
#要同步的数据库,默认所有库
#replicate-do-db = test1
# These are commonly set, remove the # and set as required.
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
user=mysql
max_allowed_packet=500M
wait_timeout=288000
interactive_timeout=288000
character-set-server = utf8
explicit_defaults_for_timestamp=true
socket=/tmp/mysql.sock
log-error = error.log
lower_case_table_names=1
max_connections=1000
max_connect_errors = 2000
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
(slave)配置如下:
[client]
socket=/tmp/mysql.sock
[mysqld]
#开启日志
log_bin
port = 3306
server_id = 12
#忽略mysql库【我一般都不写】
binlog-ignore-db = mysql
#忽略information_schema库【我一般都不写】
binlog-ignore-db = information_schema
#要同步的数据库,默认所有库
#replicate-do-db = test1
# These are commonly set, remove the # and set as required.
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
user=mysql
max_allowed_packet=500M
wait_timeout=288000
interactive_timeout=288000
character-set-server = utf8
explicit_defaults_for_timestamp=true
socket=/tmp/mysql.sock
log-error = error.log
lower_case_table_names=1
max_connections=1000
max_connect_errors = 2000
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
开启主从复制
在master端为从端创建同步数据所需的账号。
CREATE USER 'repl'@'10.3.98.%' IDENTIFIED BY 'mysql';
#为账户分配主端同步数据的权限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.3.98.%';
#查看主端binlog日志信息(name、position)
show master status;
在slave端(10.3.98.93)开启主从复制
#开启主从关系
mysql> CHANGE MASTER TO
-> MASTER_HOST='10.3.98.91',
-> MASTER_PORT=3306,
-> MASTER_USER='repl',
-> MASTER_PASSWORD='mysql',
-> MASTER_LOG_FILE='vm-linux-91-bin.000020',
-> MASTER_LOG_POS=14672;
#启动从服务
start slave;
#查看主从状态
show slave status\G
Slave_IO_Running 和 Slave_SQL_Running 都为yes时为正常。
主从复制验证
create database test;
use test;
create table temp(id int auto_increment,name varchar(10),primary key(id));
insert into temp (name) value('91'),('91'),('91');
select * from test.temp;
在从端查看是否有相同的数据。
当两个mysql都互为对方的从时,即为主主关系。
设置的slave错误时:
stop slave;
reset slave;
reset slave all;
删除slave后,重新设置即可。