CentOS6.5 Mysqlmysql-5.6.16 主从环境安装配置

2024-05-15 15:32

本文主要是介绍CentOS6.5 Mysqlmysql-5.6.16 主从环境安装配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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配置:

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
[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配置:

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
29
30
[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;

三、进行主从库账号授权:

主库:

1
2
3
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)

从库:

1
2
3
4
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 away
No connection. Trying to reconnect...
Connection id:    3
Current database: *** NONE ****************************** 1. row ***************************Slave_IO_State: Master_Host: 192.168.0.118Master_User: tongbuMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-master-bin.000003Read_Master_Log_Pos: 408Relay_Log_File: localhost-relay-bin.000007Relay_Log_Pos: 4Relay_Master_Log_File: mysql-master-bin.000003Slave_IO_Running: NoSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 408Relay_Log_Space: 120Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 1593Last_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: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1025Master_UUID: 448be30e-8f33-11e4-adfa-00266cf488bcMaster_Info_File: /home/mysql/data/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update itMaster_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp: 141230 12:20:07Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0
1 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> stop slave;

到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 主从环境安装配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/992204

相关文章

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

ubuntu20.0.4系统中安装Anaconda的超详细图文教程

《ubuntu20.0.4系统中安装Anaconda的超详细图文教程》:本文主要介绍了在Ubuntu系统中如何下载和安装Anaconda,提供了两种方法,详细内容请阅读本文,希望能对你有所帮助... 本文介绍了在Ubuntu系统中如何下载和安装Anaconda。提供了两种方法,包括通过网页手动下载和使用wg

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo

ubuntu16.04如何部署dify? 在Linux上安装部署Dify的技巧

《ubuntu16.04如何部署dify?在Linux上安装部署Dify的技巧》随着云计算和容器技术的快速发展,Docker已经成为现代软件开发和部署的重要工具之一,Dify作为一款优秀的云原生应用... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。它

Docker安装MySQL镜像的详细步骤(适合新手小白)

《Docker安装MySQL镜像的详细步骤(适合新手小白)》本文详细介绍了如何在Ubuntu环境下使用Docker安装MySQL5.7版本,包括从官网拉取镜像、配置MySQL容器、设置权限及内网部署,... 目录前言安装1.访问docker镜像仓库官网2.找到对应的版本,复制右侧的命令即可3.查看镜像4.启

VSCode中配置node.js的实现示例

《VSCode中配置node.js的实现示例》本文主要介绍了VSCode中配置node.js的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一.node.js下载安装教程二.配置npm三.配置环境变量四.VSCode配置五.心得一.no

debian12安装docker的实现步骤

《debian12安装docker的实现步骤》本文主要介绍了debian12安装docker的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录步骤 1:更新你的系统步骤 2:安装依赖项步骤 3:添加 docker 的官方 GPG 密钥步骤