CentOS6.5 Mysqlmysql-5.6.16 主从环境安装配置
来源:互联网 发布:java实例精通pdf下载 编辑:程序博客网 时间:2024/06/07 10:52
CentOS6.5 Mysqlmysql-5.6.16 主从环境安装配置
服务器配置:
192.168.0.8 master
192.168.0.9 slave
服务器系统为:CentOS6.5
软件包:
mysql-5.6.16.tar.gz
一、安装mysql
参照文档:http://blog.csdn.net/duyuanhai/article/details/36404175二、修改master和slave配置(部分参数要根据实际情况来调整):
主库/etc/my.cnf配置:
[client]
port = 3306
socket =
/var/lib/mysql/mysql
.sock
default-character-
set
=utf8
[mysqld]
server-
id
=1025
log-bin=mysql-master-bin
binlog_format = mixed
expire_logs_days=15
max_connections=1000
innodb_flush_log_at_trx_commit=1
sync_binlog=1
binlog-
do
-db=denovo_ng
binlog-ignore-db=mysql,
test
,information_schema
innodb_buffer_pool_size = 20480M
skip-name-resolve
datadir =
/home/mysql/data
port = 3306
socket =
/var/lib/mysql/mysql
.sock
key_buffer_size=16M
max_allowed_packet=16M
join_buffer_size = 512M
sort_buffer_size = 256M
read_rnd_buffer_size = 128M
innodb_buffer_pool_size = 20480M
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
重启mysq;
从库/etc/my.cnf配置:
[client]
port = 3306
socket =
/var/lib/mysql/mysql
.sock
[mysqld]
server-
id
=1052
datadir =
/home/mysql/data
port = 3306
socket =
/var/lib/mysql/mysql
.sock
user=mysql
log-bin=mysql-slave-bin
max_binlog_size=1000M
binlog_format = mixed
expire_logs_days=7
innodb_flush_log_at_trx_commit=1
sync_binlog=1
read_only=1
binlog-
do
-db=denovo_ng
binlog-ignore-db=mysql,
test
,information_schema
innodb_buffer_pool_size = 20480M
skip-name-resolve
max_connections=1000
max_user_connections=490
max_connect_errors=2
key_buffer_size=16M
max_allowed_packet=16M
join_buffer_size = 512M
sort_buffer_size = 256M
read_rnd_buffer_size = 128M
innodb_buffer_pool_size = 20480M
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
重启mysq;
三、进行主从库账号授权:
主库:
grant replication slave on *.* to
'tongbu'
@
'192.168.0.%'
identified by
'tongbu'
;
flush privileges;
show master status;
#查看主库信息
+-------------------------+----------+--------------+-------------------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+-------------------------+----------+--------------+-------------------------------+-------------------+| mysql-master-bin.000003 | 409 | denovo_ng | mysql,test,information_schema | |+-------------------------+----------+--------------+-------------------------------+-------------------+1 row in set (0.00 sec)
从库:
stop slave;
change master to master_host=
'192.168.0.8'
,master_port=3306,master_user=
'tongbu'
,master_password=
'tongbu'
, master_log_file=
'mysql-master-bin.000003'
,master_log_pos=408;
start slave;
show slave status\G;
ERROR 2006 (HY000): MySQL server has gone awayNo connection. Trying to reconnect...Connection id: 3Current database: *** NONE ****************************** 1. row *************************** Slave_IO_State: Master_Host: 192.168.0.118 Master_User: tongbu Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-master-bin.000003 Read_Master_Log_Pos: 408 Relay_Log_File: localhost-relay-bin.000007 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql-master-bin.000003 Slave_IO_Running: No Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 408 Relay_Log_Space: 120 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULLMaster_SSL_Verify_Server_Cert: No Last_IO_Errno: 1593 Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it). Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1025 Master_UUID: 448be30e-8f33-11e4-adfa-00266cf488bc Master_Info_File: /home/mysql/data/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: 141230 12:20:07 Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 01 row in set (0.00 sec)ERROR: No query specified
如果出现:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
表明mysql主从库成功。
如果出现:
Slave_IO_Running: No
Slave_SQL_Running: Yes
且有错误:
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'binlog truncated in the middle of event; consider out of disk space on master; the first event 'mysql-master-bin.000003' at 408, the last event read from './mysql-master-bin.000003' at 408, the last byte read from './mysql-master-bin.000003' at 432.'
解决办法:
从机器停止slave
mysql> stopslave;
到master机器登陆mysql:
记录master的bin的位置,例如:mysql> show mster status;
+-------------------+----------+--------------+-------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+-------------------------------------------+
| mysqld-bin.000010 | 106 | | information_schema,mysql |
+-------------------+----------+--------------+-------------------------------------------+
日志为mysqld-bin.000010
刷新日志:mysql> flush logs;
因为刷新日志file的位置会+1,即File变成为:mysqld-bin.000011
马上到slave执行
mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysqld-bin.000011',MASTER_LOG_POS=106;
mysql> slave start;
mysql> show slave status\G;
OK。
==============================================================================
参考文档
rhel6下,mysql 5.6.14 主从复制(也称mysql AB复制)环境配置[基于binlog]
一、mysql主(称master)从(称slave)复制的原理:
(1).master将数据改变记录到二进制日志(binary log)中,也即是配置文件log-bin指定的文件(这些记录叫做二进制日志事件,binary log events)
(2).slave将master的binary log events拷贝到它的中继日志(relay log)
(3).slave重做中继日志中的事件,将改变反映它自己的数据(数据重演)
附简要原理图:
二、mysql主从复制支持的类型:
(1).基于语句的复制:在主服务器上执行的SQL语句,在从服务器上执行同样的语句.MySQL默认采用基于语句的复制,效率比较高
(2).基于行的复制:把改变的内容直接复制过去,而不关心到底改变该内容是由哪条语句引发的 . 从mysql5.0开始支持
(3).混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制.
三、主从配置需要注意的地方:
(1).主DB server和从DB server数据库的版本一致
(2).主DB server和从DB server数据库数据一致[ 这里就会可以把主的备份在从上还原,也可以直接将主的数据目录拷贝到从的相应数据目录]
(3).主DB server开启二进制日志,主DB server和从DB server的server_id都必须唯一
四、主从配置的简要步骤:
附简要示意图:
1.主DB SERVER上的配置
(1).安装数据库
(2).修改数据库配置文件,指明server_id,开启二进制日志(log-bin)
(3).启动数据库,查看当前是哪个日志,position号是多少
(4).登陆数据库,授权用户[ip地址为从机IP地址,如果是双向主从,这里的还需要授权本机的IP地址(此时自己的IP地址就是从IP地址)]
(5).备份数据库[记得加锁和解锁]
(6).传送备份到从DB server上
(7).启动数据库
以下步骤,为单向主从搭建成功,想搭建双向主从需要的步骤:
(1).登陆数据库,指定主DB server的地址,用户,密码等信息[此步仅双向主从时,需要]
(2).开启同步,查看状态
2.从DB SERVER上的配置
(1).安装数据库
(2).修改数据库配置文件,指明server_id[如果是搭建双向主从的话,也要开启二进制日志(log-bin)]
(3).启动数据库,还原备份
(4).查看当前是哪个日志,position号是多少[单向主从此步不需要,双向主从需要]
(5).指定主DB server的地址,用户,密码等信息
(6).开启同步,查看状态
五、单向主从环境[也称 mysql A/B复制]的搭建案例:
1.主DB server和从DB server都安装相应版本的数据库,我的两台DB server都已经安装好(5.6.14版本),都会是双实例,这里就不演示安装,可以参考mysql源码编译安装和mysql多实例配置两篇文章
注:两台机器的的selinux都是disable(永久关闭selinux,请修改/etc/selinux/config,将SELINUX改为disabled),防火墙可以选择关闭,开启的话也行[不行的话,添加防火墙策略]
2.修改主DB server的配置文件(/etc/my.cnf),开启日志功能,设置server_id值,保证唯一[client102为主DB server]
1
2
3
4
5
6
[root@client102 scripts]# vim /etc/my.cnf
# 修改配置文件里,下面两个参数:
# 设置server_id,一般建议设置为IP,或者再加一些数字
server_id =102
# 开启二进制日志功能,可以随便取,最好有含义
log-bin=mysql3306-bin
3.启动数据库服务器,并登陆数据库,授予相应的用户用于同步
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 我这里是多实例mysql,所以启动是这样的,如果大家是单实例的,就直接启动就可以[/etc/init.d/mysqld start]
[root@client102 scripts]# mysqld_multi start 3306
# 登陆mysql 服务器
[root@client102 scripts]# mysql -uroot -S /usr/local/mysql/mysqld3306.sock -p
# 授予用户权限用于主从同步
mysql> grant replication slave on *.* to 'kongzhong'@'192.168.1.100' identified by 'kongzhong';
Query OK, 0 rows affected (0.00 sec)
# 刷新授权表信息
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
# 查看position 号,记下position 号(很重要,从机上需要这个position号和现在的日志文件,我这里是414和mysql3306-bin.000001)
mysql> show master status;
+----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+-------------------+
| mysql3306-bin.000001 | 414 | | | |
+----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
4.为保证主DB server和从DB server的数据一致,这里采用主备份,从还原来实现初始数据一致
1
2
3
4
5
6
7
8
9
# 临时锁表
mysql> flush tables with read lock;
# 我这里实行的全库备份,在实际中,我们可能只同步某一个库,可以只备份一个库
# 新开一个终端,执行如下操作
[root@client102 data]# mysqldump -p3306 -uroot -p -S /usr/local/mysql/mysqld3306.sock --all-databases > /tmp/mysql.sql
# 解锁
mysql> unlock tables;
# 将备份的数据传送到从机上,用于恢复
[root@client102 data]# scp /tmp/mysql.sql root@192.168.1.100:/tmp
5.从DB server配置文件只需修改一项,其余用命令行做
1
2
3
[root@client100 ~]# vim /etc/my.cnf
# 设置server_id,一般建议设置为IP,或者再加一些数字
server_id =100
6.启动数据库,还原备份数据
1
2
3
4
# 启动数据库
[root@client100 ~]# mysqld_multi start 3306
# 还原主DB server备份的数据
[root@client100 ~]# mysql -uroot -S /usr/local/mysql/mysqld3306.sock -p < /tmp/mysql.sql
7.登陆数据库,添加相关参数(主DBserver的ip/端口/同步用户/密码/position号/读取哪个日志文件)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@client100 ~]# mysql -uroot -S /usr/local/mysql/mysqld3306.sock -p
mysql> change master to
-> master_host='192.168.1.102',
-> master_user='kongzhong',
-> master_password='kongzhong',
-> master_port=3306,
-> master_log_file='mysql3306-bin.000001',
-> master_log_pos=414;
#/* 下面是一部分注解:
#/* 指定主DB server的IP地址
master_host='192.168.1.102'
#/* 指定用于同步的用户[这个就是我们在主DB server授权的用户]
master_user='kongzhong'
#/* 指定用于同步的用户的密码
master_password='kongzhong'
#/* 指定主DB server的端口[下面一个例子,可以重点看这个]
master_port=3306
#/* 指定从DB server 从哪个日志文件开始读[在主DB server上使用show master status查看到日志]
master_log_file='mysql3306-bin.000001'
#/* 指定 从哪个POSITION号开始读
master_log_pos=414
# 开启主从同步
mysql> start slave;
# 查看主从同步状态
mysql> show slave status\G;
# 主要看以下两个参数:[这两个参数如果是yes就表示主从同步正常]
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
8.下面大家就可以在主DB server上新建一个表,看是否能同步到从DB server上,我这里就不测试了
[注:千万不要在从DB server手动插入数据,那样数据就不一致,主从就会断开,需要重新配置了]
如果有问题,可以尝试关闭IPTABLES(/etc/init.d/iptables stop)和selinux(setenforce 0:临时关闭selinux,永久关闭selinux,请修改/etc/selinux/config,将SELINUX改为disabled)
9.上面所搭建的是单向主从,也是用的比较多的,有人想了解双向主从是如何搭建,其实,就是主DB server和从DB sever都开启日志功能,然后在主DBSERVER执行授权用户[这里授权的是自己作为从服务器,也就是这里的IP地址是主DB server的IP地址],然后再在主DB server上进行changmaster操作.有不理解的可以留言询问.
- CentOS6.5 Mysqlmysql-5.6.16 主从环境安装配置
- centOS6.5环境下mysql主从配置步骤
- Centos6.5下Redis安装、主从配置、卸载教程
- Centos6.5安装Hadoop配置集群环境
- Centos6.5 安装配置 Tomcat、MySQL环境
- Centos6.5 安装配置Weblogic环境
- Centos6.5 Mysql5.5 主从同步配置
- CentOS6.5下MySQL主从同步配置
- centos6.5 redis主从模式配置
- centos6.5 redis sentinel主从模式配置
- Centos6.5安装Mysql5.7主从
- flask框架在centos6.5环境下安装配置
- 在CentOS6.5中安装与配置J2EE环境
- centos6.5环境disconf管理端安装配置详解
- vmware中安装centos6.5配置网络环境
- 安装配置Centos6.5
- centos6.5安装配置
- CentOS6 环境下的OpenVPN安装配置
- arm-linux-objdump -D -m arm led_elf > led.dis 是什么意思?
- 学习opendaylight相关知识---Java 注解Annotation
- android线程控制UI更新(Handler 、post()、postDelayed()、postAtTime)
- UVA - 10820 Send a Table 欧拉函数
- 搭建springMVC+Hibernate+Spring
- CentOS6.5 Mysqlmysql-5.6.16 主从环境安装配置
- 第二章 思维导图
- Freemarker(一)简介
- JDBC连接数据库
- Worm
- android 获取系统当前时间
- 有趣的21
- 喜获面试金卡
- BZOJ 1821 JSOI 2010 Group 部落划分 Group Kruskal