[centos数据库同步页面没有]CentOS系统MySQL双机热备配置(主从同步)

  这篇文章为转载文章,但是在我学习过程中,经过了我的一些整理和添加修改

  在集成项目中需要应对不同环境下的安装配置,主流操作系统大致可以分为三种:Linux、Windows以及UNIX。其中Linux备受青睐的主要原因有两个:

  首先,Linux作为自由软件有两个特点:一是它免费提供源码,二是爱好者可以按照自己的需要自由修改、复制和发布程序的源码,并公布在Internet上。这就吸引了世界各地的操作系统高手为Linux编写各种各样的驱动程序和应用软件,使得Linux成为一种不仅只是一个内核,而且包括系统管理工具、完整的开发环境和开发工具、应用软件在内,用户很容易获得的操作系统。

  其次,究其根本,Linux是一个UNIX系统变种,因此也就具有了UNIX系统的一系列优良特性,UNIX上的应用可以很方便地移植到Linux平台上,这使得UNIX用户很容易掌握Linux。

  基于Linux的安全可靠、效率高、免费、良好的网络支持、与UNIX完全兼容等方面的考虑,Linux算是最常用的一种。这样,在项目中就会有在Linux下安装数据库的需求,例如Oracle、MySQL等。本文主要介绍在Linux环境下安装MySQL数据库的两种方式,以及MySQL数据库的相关配置步骤,其中常见的一些问题也会进行说明,最后会展示一种比较常见的MySQL数据库的备份方式——双机热备。

  操作系统:CentOS 6.4

  MySQL:版本为MySQL5.6

  Linux:Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

  CentOS:(CommunityEnterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件。

  MySQL:MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

  MYISAM:MySQL两种常见的存储引擎之一,特点是表数据文件和表索引文件都是独立存放,适合记录少于2000万以下、并发量不是很高的环境,适合简单的查询,不支持事务,容易出现数据丢失,表损坏,经常需要修复,修复往往也导致数据丢失,适合读多写少的环境

  INNODB:MySQL两种常见的存储引擎之一,特点是表数据文件和表索引文件是共同一个文件,适合大规模数据,小规模的数据反而效率不高,适合并发量高的环境、复杂的查询,支持事务,支持数据自动修复,保证了数据丢失最少

  1 安装方式

  在CentOS上安装MySQL的方式大致可以分为两类,一种是网络环境通畅的情况下,可以通过YUM库联网安装,另一种是通过本地上传MySQL介质进行安装。

  1.1 yum远程安装

  查看CentOS自带MySQL是否已安装

  指令:yum list installed | grep mysql

  首先需要卸载依赖文件

  指令:例如yum -y remove mysql-libs.x86_64

  若有多个依赖文件则依次卸载,当结果显示为Complete!即卸载完毕

  查看yum库上的MySQL版本信息

  指令:yum list | grep mysql或 yum -y list mysql*

  CentOS系统需要正常连接网络

  通过yum安装MySQL

  指令:yum -y install mysql-server mysql mysql-devel

  安装时会显示有冲突文件,移除冲突的文件

  指令:例如yum -y remove MySQL-client-advanced-5.6.22*

  查询是否已安装MySQL

  rpm -qa|grep -imysql

  -i忽略大小写

  成功安装后,启动MySQL失败,需要查看一下MySQL的日志信息来定位错误原因

  less/var/log/mysqld.log

  启动MySQL服务,更改数据库密码

  远程连接时,防火墙启用端口号

  指令:iptables -I INPUT -p tcp–dport 3306 -j ACCEPT

  1.2 本地介质安装

  首先下载MySQL安装包

  mysql-advanced-5.6.23-linux-glibc2.5-x86_64.tar.gz

  解压并放到安装文件夹下,其中需要使用的是

  MySQL数据库:MySQL-server-5.6.22-1.linux_glibc2.5.x86_64.rpm

  MySQL客户端:MySQL-client-5.6.22-1.linux_glibc2.5.x86_64.rpm

  安装前先检查是否已安装MySQL

  指令:rpm -qa | grep mysql

  如果之前有安装过MySQL,需要删除已安装的MySQL

  指令:例如rpm -e --nodeps mysql-libs-5.1.47-4.el6.i686

  再次检查是否已安装MySQL

  安装MySQL服务端

  指令:rpm -ivh MySQL-server-5.6.22-1.linux_glibc2.5.x86_64.rpm

  检查MySQL 3306端口是否打开了

  指令:netstat –nat

  发现还没有3306的端口,说明MySQL服务还没有启动

  启动MySQL服务

  指令:service mysql start

  Starting MySQL… SUCCESS!

  启动成功后,再次检查3306端口号

  安装客户端

  指令:rpm -ivh MySQL-client-5.6.22-1.linux_glibc2.5.x86_64.rpm

  2 配置过程

  2.1 备份方式

  MySQL的常用备份方式可分为三种:

  逻辑备份

  优点:最大好处是能够与正在运行的MySQL自动协同工作,在运行期间可以确保备份是当时的点,它会自动将对应操作的表锁定,不允许其他用户修改(只能访问),可能会阻止修改操作,SQL文件通用方便移植。

  缺点:备份的速度比较慢,如果是数据量很多的时候,就很耗时间。如果数据库服务器处在提供给用户服务状态,在这段长时间操作过程中,意味着要锁定表(一般是读锁定,只能读不能写入数据),那么服务就会影响的。

  物理备份

  直接拷贝只适用于MYISAM类型的表。这种类型的表是与机器独立的。但实际情况是,设计数据库的时候不可能全部使用MYISAM类型表。也不可能:因为MYISAM类型表与机器独立,方便移植,于是就选择这种表,这并不是选择它的理由。

  缺点:不能去操作正在运行的MySQL服务器(在拷贝的过程中有用户通过应用程序访问更新数据,这样就无法备份当时的数据)可能无法移植到其他机器上去。

  更多的情况是,会根据业务特点(比如需要支持事务机制就必须使用INNODB),查询速度和服务性能来选择表类型的。

  双机热备份

  MySQL数据库没有增量备份的机制。当数据量太大的时候备份是一个很大的问题。还好MySQL数据库提供了一种主从备份的机制(也就是双机热备)

  优点:适合数据量大的时候。大的互联网公司对于MySQL数据备份,都是采用热机备份。搭建多台数据库服务器,进行主从复制。

  这里写图片描述

  实现机制:对于一个MySQL服务器,一般有两个线程来负责复制和被复制。当开启复制之后:

  作为主服务器Master,会把自己的每一次改动都记录到二进制日志 binlog 中。(从服务器会负责来读取这个log,然后在自己那里再执行一遍。)

  作为从服务器Slave,会用master上的账号登陆到master上,读取master的binlog,写入到自己的中继日志 Relaylog,然后自己的SQL线程会负责读取这个中继日志,并执行一遍。

  在考虑双机热备时,需要注意,一般意义上的双机热备都会有一个切换过程,这个切换过程可能是一分钟左右。在切换过程中,服务是有可能短时间中断的。但是,当切换完成后,服务将正常恢复。因此,双机热备不是无缝、不中断的,但它能够保证在出现系统故障时,能够很快恢复正常的服务,业务不致受到影响。而如果没有双机热备,则一旦出现服务器故障,可能会出现几个小时的服务中断,对业务的影响就可能会造成很严重的损失。

  2.2 配置步骤

  主服务器:

  开启二进制日志

  配置唯一的server-id

  获得master二进制日志文件名及位置

  创建一个用于slave和master通信的用户账号

  从服务器:

  配置唯一的server-id

  使用master分配的用户账号读取master二进制日志

  启用slave服务

  环境要求:

  主数据库(Master)IP:10.254.1.248

  备份数据库(Slave)IP:10.254.1.249

  备份前保证两个数据库的数据一致

  Master端

  进入MySQL命令行, 给备份主机赋予复制权限,即备份主机使用用户名backup,密码123456就可以连接到主服务器,backup就是同步账号

  修改配置文件my.cnf[mysqld]:

  查看master状态

  在MySQL命令行:

  结果表示现在写日志的文件是mysql-bin.000013,位置是1105,slave端要从这个点开始同步备份aeaiesb

  slave端

  停掉数据库

  service mysql stop

  修改配置文件my.cnf,添加如下配置

  重启数据库

  service mysql start

  在MySQL命令行, 查看slave状态

  这时 Slave_IO_Running的值是No,I/O线程没有启动,是无法进行同步的处理步骤:

  在命令行下:

  这样就可以进行同步了,在master的aeaiesb库中创建表,并插入数据会实时在slave端显示。

  3 常见问题

  3.1 如果主服务器已经存在应用数据,则在进行主从复制时,需要做以下处理:

  (1)主数据库进行锁表操作,不让数据再进行写入动作

  mysql> FLUSH TABLES WITH READ LOCK;

  (2)查看主数据库状态

  mysql> show master status;

  (3)复制数据文件

  将主服务器的数据文件(整个/opt/mysql/data目录)复制到从服务器,建议通过tar归档压缩后再传到从服务器解压。

  (4)取消主数据库锁定

  mysql> UNLOCK TABLES;

  3.2 更改MySQL数据存储位置

  首先,MySQL安装完成后不像 SQLServer 默认安装在一个目录,它的数据库文件、配置文件和命令文件分别在不同的目录,了解这些目录非常重要,尤其对于Linux的初学者,因为 Linux本身的目录结构就比较复杂,如果搞不清楚MySQL的安装目录那就无从谈起深入学习。

  a、数据库目录 /var/lib/mysql/

  b、配置文件 /usr/share/mysql(mysql.server命令及配置文件)

  c、相关命令 /usr/bin(mysqladmin mysqldump等命令)

  d、启动脚本 /etc/rc.d/init.d/(启动脚本文件mysql的目录)

  其次,由于MySQL数据库目录占用磁盘比较大,而MySQL默认的数据文件存储目录为 /“var/lib/mysql”,也可以把要把数据目录移到"/" 根目录下的 “mysqldata” 目录中

  首先停止MySQL服务

  终端执行命令

  /etc/init.d/mysql stop

  在终端将原来mysql数据库目录文件全部都复制到新的数据库目录下

  cp -r /var/lib/mysql /disk1/mysqldata

  修改my.cnf配置文件

  先备份,再修改

  cp /etc/my.cnf /etc/my.cnfbak

  vi /etc/my.cnf

  在打开的文件中找到datadir这行代码,查看后面的路径,做备份(在这行代码前加#)

  原路径:/var/lib/mysql

  新路径:/disk1/mysqldata

  修改mysqld

  先备份,再修改

  cp /etc/init.d/mysqld /etc/init.d/mysqldbak

  vi /etc/init.d/mysqld

  datadir原路径:/var/lib/mysql

  datadir新路径:/disk1/mysqldata

  cp /usr/bin/mysqld_safe /usr/bin/mysqld_safebak

  vi /usr/bin/mysqld_safe

  datadir原路径:/var/lib/mysql

  datadir新路径:/disk1/mysqldata

  建立一个mysql.sock的链接

  ln -s /disk1/mysqldata /mysql.sock /var/lib/mysql/mysql.sock

  重启服务

  service mysqld start

  进入MySQL命令行查询数据文件目录地址

  mysql> show variables like ‘%dir%’;

  3.3 启动失败可能的错误原因

  通过查看MySQL日志时发现Table ‘mysql.plugin’ doesn’t exist这样的问题,这是因为新安装的MySQL需要初始化数据库

  解决步骤:

  进入https://blog.csdn.net/weixin_42604515/article/details/mysql/bin目录下,执行脚本https://blog.csdn.net/weixin_42604515/article/details/mysql_install_db;

  执行完(1)后,此时会在https://blog.csdn.net/weixin_42604515/article/details/mysql/var目录下创建两个目录文件mysql、test;

  修改mysql、test两个目录及目录下所有文件的权限:

  指令:chown mysql:mysql -R mysql test

  日志报错

  首先关闭selinux服务

  cd /etc/selinuxvi config

  修改selinux为disabled,重启机器

  启动失败时

  Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist

  使用命令

  mysql_install_db --user=mysql

  初始化命令

  启动MySQL成功后,登录时

  ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)

  需要重置密码

  首先停止MySQL服务

  service mysql stop

  用mysqld_safe重启服务

  /usr/bin/mysqld_safe --skip-grant-tables

  无密码登录

  mysql –u root

  授权

  grant all privileges on . to ‘root’@‘localhost’ identified by ‘密码’ with grant option;

  授权新的数据库文件存放地址

  chown -R mysql:mysql /disk1/mysqldata

  CentOS镜像下载

  MySQL官方手册

  MySQL数据库设置主从同步

  MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践

 数据库同步软件

猜你喜欢

转载自www.cnblogs.com/sqlserver-mysql/p/12750797.html