之前做过一次在单台机器上的多实例的mysql,这次分开做,使用两台主机。
这里使用的主机地址分别为:
MASTER:192.168.214.135
SLAVE : 192.168.214.128
这两个主机已经安装过mysql,但是两个数据库数据不一样
主从复制大致步奏
配置MySQL复制基本步骤:
一、master
1、启用二进制日志
log-bin = master-bin
log-bin-index = master-bin.index
2、选择一个惟一server-id
server-id = {0-2^32}
3、创建具有复制权限的用户
REPLICATION SLAVE
二、slave
1、启用中继日志
relay-log = relay-log
relay-log-index =
2、选择一个惟一的server-id
server-id = {0-2^32}
3、连接至主服务器,并开始复制数据;
mysql> CHANGER MASTER TO MASTER_HOST='',MASTER_PORT='',MASTER_LOG_FILE='',MASTER_LOG_FIEL_POS='',MASTER_USER='',MASTER_PASSWORD='';
mysql> START SLAVE;
mysql> START SLAVE IO_Thread;
mysql> START SLAVE SQL_Thread;
下面检查主服务器MASTER的数据库配置文件
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 8
datadir=/mydata/data
log-bin=master-bin
log-bin-index=master-bin.index
binlog_format=mixed
#relay-log = relay-mysql
#relay-log-index = relay-mysql.index
#auto-increment-increment = 2
#auto-increment-offset = 1
server-id = 1
下面配置SLAVE的配置文件
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysqldata
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
server-id = 2
relay-log = relay-log
relay-log-index = relay-log.index
主从数据库的其他配置项有所不同,这里先不管
一: 上面主从库的配置文件都设置好后,登录到MASTER库上,创建一个具有复制权限的用户
grant replication slave on *.* to 'feng'@'192.168.%.%' identified by 'fsz123';
flush privileges;
slave添加master信息前先查看master库的bin-log日志记录位置节点,master库中执行:
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000029 | 107 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.01 sec)
二:登录从库SLAVE 添加master信息
mysql> change master to master_host='192.168.214.135',master_user='feng',master_password='fsz123',master_log_file='master-bin.000029',master_log_pos=323;
Query OK, 0 rows affected (0.15 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
三:启动从库复制:
mysql> SLAVE START;
执行: show slave status\G 查看复制状态
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.214.135
Master_User: feng
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000029
Read_Master_Log_Pos: 323
Relay_Log_File: relay-log.000002
Relay_Log_Pos: 254
Relay_Master_Log_File: master-bin.000029
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
从库的IO线程和SQL线程已经开启
下面执行show databases; 查看数据库同步状况
查看从库的数据信息
Database |
+--------------------+
| information_schema |
| demo |
| demo222 |
| demo333 |
| mysql |
| performance_schema |
| test
主库里新建的demo222,demo333已经到从库中
//
mysql的双主模式配置
在上面的基础上,再增加双主复制的实现,实现双主模式,在从库中也要开启二进制日志文件,同时主库中也增加slave中继日志功能
编辑从库my.cnf
log-bin=master-bin
log-bin-index=master-bin.index
binlog_format=mixed
relay-log = relay-mysql
relay-log-index = relay-mysql.index
auto-increment-increment = 2
auto-increment-offset = 2
编辑主库my.cnf 添加slave日志
log-bin=master-bin
log-bin-index=master-bin.index
binlog_format=mixed
auto-increment-increment = 2 #步进值auto_imcrement。一般有n台主MySQL就填n
auto-increment-offset = 1 #步进值auto_imcrement。一般有n台主MySQL就填n
#binlog-ignore=mysql #忽略mysql库【或者其他不需同步复制的库】
# replicate-do-db=aa #要同步的数据库,默认所有库【或者其他指定复制的库】
relay-log = relay-mysql
relay-log-index = relay-mysql.index
在主库中执行change master to 指令
change master to master_host='192.168.214.128',master_user='feng',master_password='fsz123',master_log_file='master-bin.000001',master_log_pos=107;
mysql> flush privileges;
启动主库中的复制功能
start slave;
此时,mysql双主复制完成。