Mysql 5.5.19 源码安装-配置优化-主从复制-自动备份

Mysql 5.5.19 源码安装-配置优化-主从复制-自动备份
Mysql 5.5.19 源码安装-配置优化-主从复制-自动备份

Mysql 5.5.19 源码安装-配置优化-主从复制-自动备份

Mysql 安装配置

软件源代码包存放位置/usr/local/src

源码包编译安装位置(prefix) /usr/local/

脚本以及维护程序存放位置/home/baison/script

数据库文件位置:/data/mysql/

数据库日志位置:/data/log

数据库备份目录:/data/backup

1、卸载默认的mysql及apache的rpm包

#yum remove httpd mysql mysql-server php php-cli php-common php-devel php-gd -y 2、更新时间

service ntpd stop

ntpdate https://www.360docs.net/doc/d313785083.html,

service ntpd start

chkconfig ntpd on

3、安装数据库

安装之前先安装编译环境及需要的库文件

#yum install gcc gcc-c++ make ncurses-devel -y

cd /usr/local/src

wget https://www.360docs.net/doc/d313785083.html,/files/v2.8/cmake-2.8.4.tar.gz

#tar xvf cmake-2.8.5.tar.gz

# cd cmake-2.8.5

# ./configure

make

make install

cd /usr/local/src

# tar zxvf mysql-5.5.19.tar.gz

# cd mysql-5.5.19

# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql

-DMYSQL_DATADIR=/data/mysql

-DWITH_MYISAM_STORAGE_ENGINE=1

-DWITH_INNOBASE_STORAGE_ENGINE=1

-DWITH_ARCHIVE_STORAGE_ENGINE=1

-DWITH_BLACKHOLE_STORAGE_ENGINE=1

-DENABLED_LOCAL_INFILE=1

-DDEFAULT_CHARSET=utf8

-DDEFAULT_COLLATION=utf8_general_ci

-DEXTRA_CHARSETS=all

# make

#make install

mysql 配置

#userdel -r mysql

#groupadd -r -g 3306 mysql

# useradd -u 3306 -g mysql -r -M -s /sbin/nologin mysql

#mkdir -p /data/mysql/

#mkdir -p /data/log

#chown -R mysql:mysql /data/

#cp support-files/https://www.360docs.net/doc/d313785083.html,f /etc/https://www.360docs.net/doc/d313785083.html,f

cp support-files/https://www.360docs.net/doc/d313785083.html,f /etc/https://www.360docs.net/doc/d313785083.html,f

#/usr/local/mysql/scripts/mysql_install_db –user=mysql –basedir=/usr/local/mysql –datadir=/data/mysql & //初始化数据库

# cp support-files/mysql.server /etc/init.d/mysqld

#chmod +x /etc/init.d/mysqld

# /chkconfig –add mysqld

#chkconfig mysqld on

# service mysqld start

# netstat -tnlp |grep 3306

# cd /usr/local/bin //进入用户的默认搜索路径下建立mysql命令的软连接,可以直接执行mysql命令

# ln -s /usr/local/mysql/bin/mysql mysql

# ln -s /usr/local/mysql/bin/mysqldump mysqldump

# ln -s /usr/local/mysql/bin/mysqladmin mysqladmin

# ln -s /usr/local/mysql/bin/mysqlbinlog

# mysqladmin -u root -p password ’123456′//设置数据库密码,可以不设置密码

# mysql -u root -p

mysql> flush privileges;

sudo vim /etc/https://www.360docs.net/doc/d313785083.html,f //Mysql 优化,在[mysqld]配置参数下面添加下面几行(大概37行下面),根据服务

skip-external-locking

key_buffer_size = 256M

max_allowed_packet = 500M

table_open_cache = 2048

sort_buffer_size = 8M

read_buffer_size = 4M

read_rnd_buffer_size = 16M

myisam_sort_buffer_size = 128M

###添加

log-error=/data/log/mysql.err.log

skip-name-resolv

max_connections = 1500

max_connect_errors = 10

slow_query_log

long_query_time = 2

slow_query_log_file = /data/log/slow.log

bulk_insert_buffer_size = 64M

query_cache_type = 1

query_cache_size =256M

query_cache_limit = 4M

ft_min_word_len = 2

join_buffer_size = 16M

innodb_file_per_table

log-bin-trust-function-creators=1

myisam_repair_threads = 1

innodb_log_files_in_group = 3

thread_cache_size = 8

# Try number of CPU’s*2 for thread_concurrency

thread_concurrency = 8

:wq //保存退出

sudo rm -rvf /data/mysql/data/ib_logfile* //删除原来的默认文件

sudo /sbin/service mysqld restart

Mysql> grant all privileges on *.* to openshop@’%’ identified by ‘openshop’; Mysql>flush privileges;

Mysql主从复制配置:

一、编辑主服务器的配置文件/etc/https://www.360docs.net/doc/d313785083.html,f,在[mysqld]中添加如下内容即可:

log-bin=mysql-bin

# binary logging format – mixed recommended

binlog_format=mixed //主从复制模式,混合模式(MBR)默认的

binlog_cache_size=4M //设置binlog缓存大小

max_binlog_size=300M //设置binlog文件最大体积

2、在master节点node1上建立复制用户,登入数据库进行用户授权

mysql>GRAN T REPLICATION SLAVE ON *.* TO ‘repl’@'%’ IDENTIFIED BY ‘repl’;

3、备份Master数据

备份Master上的数据,首先执行锁表操作,如下SQL语句:

mysql>FLUSH TABLES WITH READ LOCK;

Query OK, 0 rows affected (0.00 sec)

mysql> reset master;

Query OK, 0 rows affected (0.00 sec)

不要退出这个终端,否则这个锁就失效了;在不退出终端的情况,再开一个终端直接打包压缩数据文件或使用mysqldump工具来导出数据。

#mysqldump -uroot -h 127.0.0.1 –opt openshop >/data/mysql/backup/openshop.sql

#cd /data/mysql/backup/

4、备份数据库到从数据库上面

#tar -czvf openshop.tar.gz openshop.sql

#scp openshop.tar.gz root@10.7.70.42:/data/mysql/backup

导入数据库到其他Slave机器上。导入完成之后,在上面的命令终端上执行:

mysql>UNLOCK TABLES;

mysql> show processlist;

mysql> show master statusG;查看主服务器的bin-log 和id

二、设置Slave主机

1、编辑从数据库的vim /etc/https://www.360docs.net/doc/d313785083.html,f 配置文件,前面配置参数和主的一样,都是根据硬件内存调整参数

#binlog_format=mixed

# required unique id between 1 and 2^32 – 1

# defaults to 1 if master-host is not set

# but will not function as a master if omitted

server-id= 2

read_only=1

在slave上执行如下命令

mysql> CHANGE MASTER TO MASTER_HOST=’10.7.70.41′,

-> MASTER_USER=’repl’,

-> MASTER_PASSWORD=’repl’,

-> MASTER_LOG_FILE=’mysql-bin.000001′, //这里根据主服务器的binlog和id设置

-> MASTER_LOG_POS=107;

执行完之后执行:

mysql> slave start;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave statusG;

从输出看到:Slave_IO_Running和Slave_SQL_Running如果都为Yes时,表示配置成功

Mysql本地自动备份脚本

1、efast自动备份脚本:

vim /root/dbbackup.sh

#!/bin/bash

DATE=`date +%Y%m%d%H%M`

DATABASE=openshop

BACKUP=/data/backup

/usr/local/mysql/bin/mysqldump -uroot -h 127.0.0.1 -R –opt $DATABASE |gzip > ${BACKUP}/${DATABASE}_${DATE}.sql.gz

sleep 3

find $BACKUP -mtime +20 |xargs rm -rf

3自动清除binlog,保存10个binlog文件

vim /root/delbinlog.sh

#/bin/bash

LOGPUG=`mysql -e “show master logs”|awk ‘{print $1}’|grep -v “Log_name”|tail -10|head -1` mysql -e “PURGE BINARY LOGS TO ”$LOGPUG

4每天凌晨执行备份脚本:

Openshop数据库在每天3点整备份,e3数据库在每天3:30备份

[root@Xen1db01 script]# crontab -e

30 1 * * * /root/dbbackup.sh

30 3 * * 7 /root/delbinlog.sh

MySQL主从复制、搭建、状态检查、中断排查及备库重做 实战手册

美河学习在线https://www.360docs.net/doc/d313785083.html, MySQL主从复制 MySQL主从复制、搭建、状态检查、中断排查及备库重做 本文档主要对MySQL主从复制进行简单的介绍,包括原理简介、搭建步骤、状态检查、同步中断及排查、备库重建。

目录 一、MySQL主从复制概述 (2) 1、主从复制简介 (2) 2、主从复制原理、机制 (2) 3、主从复制原理图 (3) 二、MySQL主从复制搭建 (4) 1、Master端配置部署 (4) 2、Slave端配置部署 (4) 3、建立主从同步 (4) 三、主从复制状态检查及异常处理 (6) 1、主从复制状态检查 (6) 2、IO_thread异常 (7) 3、sql_thread异常 (8) 4、主从复制延迟 (9)

一、MySQL主从复制概述 1、主从复制简介 MySQL主从复制就是将一个MySQL实例(Master)中的数据实时复制到另一个MySQL实例(slave)中,而且这个复制是一个异步复制的过程。 实现整个复制操作主要由三个进程完成的,其中两个进程在Slave(sql_thread和IO_thread),另外一个进程在 Master(IO进程)上。 2、主从复制原理、机制 要实施复制,首先必须打开Master端的binary log(bin-log)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。 复制的基本过程如下: 1)、Slave上面的IO_thread连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容; 2)、Master接收到来自Slave的IO_thread的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO_thread。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log file的以及bin-log pos; 3)、Slave的IO_thread接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”; 4)、Slave的Sql_thread检测到relay-log中新增加了内容后,会马上解析relay-log 的内容成为在Master端真实执行时候的那些可执行的内容,并在本数据库中执行。

用mysql源码进行SQL解析

用mysql源码进行SQL解析 Mysql是通过yacc进行SQL语句解析的,这里介绍一下如何使用mysql的源码进行SQL语句解析。由于Mysql的源代码注释比较少,而且缺少资料,所有些地方研究不够深入。 1Filed介绍 MYSQL中Filed有以下几种类型: enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY, MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG, MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE, MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP, MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24, MYSQL_TYPE_DATE, MYSQL_TYPE_TIME, MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR, MYSQL_TYPE_NEWDATE, MYSQL_TYPE_ENUM=247, MYSQL_TYPE_SET=248, MYSQL_TYPE_TINY_BLOB=249, MYSQL_TYPE_MEDIUM_BLOB=250, MYSQL_TYPE_LONG_BLOB=251, MYSQL_TYPE_BLOB=252, MYSQL_TYPE_VAR_STRING=253, MYSQL_TYPE_STRING=254, MYSQL_TYPE_GEOMETRY=255 }; 下图列出几种常用的Filed子类及其关系 2ITEM介绍 在MYSQL中,有以下ITEM大类型: FIELD_ITEM, FUNC_ITEM, SUM_FUNC_ITEM, STRING_ITEM, INT_ITEM, REAL_ITEM, NULL_ITEM, VARBIN_ITEM, COPY_STR_ITEM, FIELD_AVG_ITEM, DEFAULT_VALUE_ITEM, PROC_ITEM,COND_ITEM, REF_ITEM, FIELD_STD_ITEM, FIELD_VARIANCE_ITEM, INSERT_VALUE_ITEM, SUBSELECT_ITEM, ROW_ITEM, CACHE_ITEM, TYPE_HOLDER, PARAM_ITEM

mysql主从

一、概述 MySQL从3.23.15版本以后提供数据库复制(replication)功能,利用该功能可以实现两个数据库同步、主从模式、互相备份模式的功能。本文档主要阐述了如何在linux系统中利用mysql的replication进行双机热备的配置。 二、环境 操作系统:Linux 2.6.23.1-42.fc8 # SMP(不安装XEN) Mysql版本:5.0.45-4.fc8 设备环境:PC(或者虚拟机)两台 三、配置 数据库同步复制功能的设置都在MySQL的配置文件中体现,MySQL的配置文件(一般是https://www.360docs.net/doc/d313785083.html,f):在本环境下为/etc/https://www.360docs.net/doc/d313785083.html,f 。 3.1 设置环境: IP 的设置: A主机 IP:10.10.0.119 Mask:255.255.0.0 B主机 IP:10.10.8.112 Mask:255.255.0.0 在IP设置完成以后,需要确定两主机的防火墙确实已经关闭。可以使用命令service iptables status 查看防火墙状态。如果防火墙状态为仍在运行。使用service iptables stop 来停用防火墙。如果想启动关闭防火墙,可以使用setup 命令来禁用或定制。 最终以两台主机可以相互ping通为佳。 3.2 配置A主(master) B从(slave)模式 3.2.1 配置A 为master 1、增加一个用户同步使用的帐号: GRANT FILE ON *.* TO ‘backup’@'10.10.8.112' IDENTIFIED BY ‘1234’; GRANT REPLICATION SLAVE ON *.* TO ‘backup’@'10.10.8.112' IDENTIFIED BY ‘1234’; 赋予10.10.8.112也就是Slave 机器有File权限,只赋予Slave机器有File权限还不行,还要给它REPLICATION SLAVE的权限才可以。 2、增加一个数据库作为同步数据库: create database test; 3、创建一个表结构: create table mytest (username varchar(20),password varchar(20)); 4、修改配置文件: 修改A的/etc/https://www.360docs.net/doc/d313785083.html,f 文件,在https://www.360docs.net/doc/d313785083.html,f 配置项中加入下面配置:server-id = 1 #Server 标识 log-bin

MySQL主从、主主复制及高可用性要点

一:MySQL复制: MySQL复制简介: 将master服务器中主数据库的ddl和dml操作通过二进制日志传到slaves服务器上,然后在master服务器上将这些日志文件重新执行,从而使得slave服务器和master服务器上的数据信息保持同步。 Mysql复制的原理: 将数据分布到多个系统上去,是通过将Mysql的某一台master主机的数据复制到其它(slave)主机上,并重新执行一遍来实现的; 复制过程中一个服务器充当master服务器,而一台或多台其它服务器充当slave服务器。master服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。 这些日志可以记录发送到slave服务器的更新。当一个slaves服务器连接master服务器时,它通知master服务器从服务器在日志中读取的最后一次成功更新的位置。slave服务器接收从那时起发生的任何更新,然后封锁并等待master服务器通知新的更新。 mysql复制的优点: 在slave服务器上执行查询操作,降低master服务器的访问压力 当master服务器上出现了问题可以切换到slave服务器上,不会造成访问中断等问题 在slave服务器上进行备份,以避免备份期间影响master服务器的服务使用及日常访问

Mysql自身的复制功能:是构建大型、高性能应用程序的基础。 mysql支持的复制类型: 基于语句的复制:在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制。 基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持 混合类型的复制::默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。 MySQL复制技术的特点: 数据分布(Data distribution ) 备份(Backups) 负载平衡(load balancing) 高可用性和容错性High availability and failover 复制的工作过程: master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events); slave将master的binary log events拷贝到它的中继日志(relay log); slave重做中继日志中的事件,将改变反映它自己的数据。

MySQL最全整理(面试题+笔记+导图),面试大厂不再被MySql难倒!

前言 作为一名编程人员,对MySQL一定不会陌生,尤其是互联网行业,对MySQL的使用是比较多的。对于求职者来说,MySQL又是面试中一定会问到的重点,很多人拥有大厂梦,却因为MySQL败下阵来。实际上,MySQL并不难,今天这份最全的MySQL总结,助你向大厂“开炮”,面试不再被MySQL难倒。 注意:关于MySQL的内容整理,包括了面试题、学习笔记、使用文档以及Xmind思维图几个部分,需要高清完整版的请转发+关注,然后私信回复“666”获得免费领取方式 01、MySQL 面试题集合总结 1.1 MySQL 面试题(基础部分): ?drop、truncate、delete区别 ?数据库三范式是什么? ?union和union all有什么不同? ?char、varchar2、varchar有什么区别? ?合并查询有哪些? ?SQL语句执行顺序 ?null的含义 ?MySQL、SqlServer、oracle写出字符存储、字符串转时间 ?update语句可以修改结果集中的数据吗? ?B树和B+树的区别 ?你建过索引吗? 建索引的原则 ?索引的类型, 如主键索引 ?查看SQL执行计划

?有十万条数据, 写SQL语句查询其中某字段较大值的几条数据 ?子查询与关联查询的区别 ?MySQL InnoDB、Mysaim的特点? ?乐观锁和悲观锁的区别?? ?行锁和表锁的区别? ?数据库隔离级别是什么?有什么作用? ?MySQL主备同步的基本原理。 ?如何优化数据库性能(索引、分库分表、批量操作、分页算法、升级硬盘SSD、业务优化、主从部署) ?SQL什么情况下不会使用索引(不包含,不等于,函数) ?一般在什么字段上建索引(过滤数据最多的字段) ?MySQL,B+索引实现,行锁实现,SQL优化 ?如何解决高并发减库存问题 ?数据库事务的几种粒度 1.2 MySQL 面试题(实战部分): ?数据库三范式,根据秒杀场景设计数据表 ?数据库的主从复制 ?死锁怎么解决 ?mysql并发情况下怎么解决(通过事务、隔离级别、锁) ?触发器的作用? ?什么是存储过程?用什么来调用? ?存储过程的优缺点?

mysql主从复制原理

主从复制的原理: 分为同步复制和异步复制,实际复制架构中大部分为异步复制。 复制的基本过程如下: 1)、Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容; 2)、Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置; 3)、Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”; 4)、Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。 Mysql为了解决这个风险并提高复制的性能,将Slave端的复制改为两个进程来完成。提出这个改进方案的人是Y ahoo!的一位工程师“Jeremy Zawodny”。这样既解决了性能问题,又缩短了异步的延时时间,同时也减少了可能存在的数据丢失量。当然,即使是换成了现在这样两个线程处理以后,同样也还是存在slave 数据延时以及数据丢失的可能性的,毕竟这个复制是异步的。只要数据的更改不是在一个事物中,这些问题都是会存在的。如果要完全避免这些问题,就只能用mysql的cluster来解决了。不过mysql的cluster是内存数据库的解决方案,需要将所有数据都load到内存中,这样就对内存的要求就非常大了,对于一般的应用来说可实施性不是太大。 复制常用架构 Mysql复制环境90%以上都是一个Master带一个或者多个Slave的架构模式,主要用于读压力比较大的应用的数据库端廉价扩展解决方案。因为只要master和slave的压力不是太大(尤其是slave端压力)的话,异步复制的延时一般都很少很少。尤其是自slave端的复制方式改成两个进程处理之后,更是减小了slave端的延时。而带来的效益是,对于数据实时性要求不是特别的敏感度的应用,只需要通过廉价的pc server来扩展slave的数量,将读压力分散到多台slave的机器上面,即可解决数据库端的读压力瓶颈。这在很大程度上解决了目前很多中小型网站的数据库压力瓶颈问题,甚至有些大型网站也在使用类似方案解决数据库瓶颈。 Mysql主从复制配置过程: 环境:master: 192.168.0.3 Slave: 192.168.0.4 Mysql版本为5.0.67(编译安装) database: eric 1.Master服务器启动mysql, a)#mysql –uroot –proot b)创建一个有复制权限的用户,只限slave远程连接访问. i. mysql>grant replication slave on *.* to replication@192.168.0.4

网站MySQL数据库优化方案-主从架构及读写分离

网站MySQL数据库优化方案 网络运维信息管理中心 (2020年8月)

数据库为网站提供数据的结构化存储,是网站系统的重要组成部分,但随着业务逻辑的复杂度的增加,数据库需要不断的优化,单一的数据库已无法满足现在要求。 1.1优化目标 针对网站的MySQL数据库部署架构进行优化,其优化的目的是为了防止数据库出现单点故障问题,提高数据库的处理能力,提高数据库的可靠性,为保证网站业务正常办理。 1.2优化工作思路 1、对现有数据库现状分析包括现有数据库配置合理性分析、现有数据库部署情况两部分工作内容; 2、梳理现有网站的功能模块,目的是通过梳理网站的各功能模块对数据读取时效性,分析其是否可以实现读写; 3、以数据库主从架构及数据库读写分离方式,对网站的MySQL 数据库提出数据库部署架构优化的方案,数据库主从架构的多数据库模式,解决数据库单点存在的问题,当主数据库出现宕机时,可以将从数据库代替主数据库恢复业务系统正常运行,而且避免数据的丢失,提高数据库高可靠性和高可用性;通过部分查询统计功能,实现数据库读写分离,以便对数据库负载进行分流,缓解主数据库的读取压力。

2.1当前数据库部署架构图 当前网站的数据库采用单台MySQL数据库提供数据库服务,当前部署架构图如下: 2.2现有数据库主要配置梳理

2.3数据库部署情况梳理 2.3.1数据库安装部署情况梳理 2.3.2现有应用连接数据库情况梳理 连接数据库的应用系统有会员管理、权限管理、订单模块、商品管理、促销管理、广告管理、报表统计、文章管理、评论管理、系统设置、数据库管理、短信管理、推荐管理、邮件群发管理等。2.3.3数据库服务启动、停止方式梳理 1、启动命令 (1)普通启动:/data/soa/mysql/bin/mysqld (2)centos6以前版本:service start mysqld (3)centos7+:systemctl mysqld start

mysql数据库主主同步方案

Mysql 数据库主主(master-master)同步方案 一、MySQL同步概述 1.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费多久,不容乐观的未来,但是我们还是要能熟练掌握MySQL数据的架构和安全备份等功能,毕竟现在它还算是开源界的老大吧! MySQL数据库支持同步复制、单向、异步复制,在复制的过程中一个服务器充当主服务,而一个或多个服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。 请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。 单向复制有利于健壮性、速度和系统管理: 健壮性:主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作为备份。

速度快:通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。 系统管理:使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。 2.MySQL数据复制的原理 MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。 每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以便从服务器可以对其数据拷贝执行相同的更新。 认识到二进制日志只是一个从启用二进制日志的固定时间点开始的记录非常重要。任何设置的从服务器需要主服务器上的在主服务器上启用二进制日志时的数据库拷贝。如果启动从服务器时,其数据库与主服务器上的启动二进制日志时的状态不相同,从服务器很可能失败。 将主服务器的数据拷贝到从服务器的一个途径是使用LOAD DATA FROM MASTER语句。请注意LOAD DATA FROM MASTER目前只在

mysql主从数据库服务器的设置

mysql 主从数据库服务器的设置 MySQL主从服务器(Replication)的设置: 1.首先在主服务器上为从服务器建立一个账户 mysql>grant replication slave on *.* to '用户名'@'主机' identified by '密码'; 2.登录从服务器使用步骤一申请的用户名和密码访问主数据库如果可以访问代表建立用户成功 mysql -u 用户名 -p密码 -h 主数据库IP -P3306 如果不能正常访问可能是防火墙的原因,可以停掉防火墙看看情况 /etc/iptables stop 3.编辑主数据库服务器配置文件 vi /etc/ #slave-config-start------------------ server-id=3(主从服务器server-id不能重复) binlog-do-db=需要复制的数据库名称 binlog-ignore-db=不需要复制的数据库名称 binlog-ignore-db=不需要复制的数据库名称

lower_case_table_names=1(大小写相同) #slave-config-end-------------------- 4.编辑从数据库服务器配置文件 vi /etc/ #slave-config-start---------------------------- server-id=2 master-host=主数据库服务器IP master-user=步骤一分配的用户名 master-password=步骤一分配的密码 master-port=3306 replicate-do-db=cetv master-connect-retry=60 lower_case_table_names=1 #slave-config-end------------------------------5.手动备份导入使主从数据库的数据一致 Slave_IO_Running: No Slave_SQL_Running: Yes 的解决方法 1.首先到主数据库中

MySQL主从同步原理+部署

MySQL主从同步原理+部署 一.主从的作用: 1.可以当做一种备份方式 2.用来实现读写分离,缓解一个数据库的压力 二.MySQL主从备份原理 master 上提供binlog , slave 通过 I/O线程从 master拿取 binlog,并复制到slave的中继日志中 slave 通过 SQL线程从 slave的中继日志中读取binlog ,然后解析到slave中 部署主从环境:主服务器:192.168.1.110(编译好的MySQL5.1版本的数据库)从服务器:192.168.1.120(编译好的MySQL5.1版本的数据库) (温馨提示:主和从数据库版本必须是一样。或者主库的数据库版本必须比从库高,不然会导致很多故障的发生。) 三:生产环境应用MySQL主从同步场景: 1.一般用主库做为提供业务用户写操作(比如:在互联网上写一条微博,这时候就会 写到mysql数据库的主库中) 2.一般用从库做为提供业务用户读操作(比如:在互联网上,我想看一条微博,这时 候里面提供数据就是MySQL数据库的从库中。) (1)在主服务器(192.168.1.110)上操作。 [root@Jiechao ~]# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:0C:29:5E:6F:A7 inet addr:192.168.1.110 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe5e:6fa7/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:141354 errors:0 dropped:0 overruns:0 frame:0 TX packets:140807 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:142083379 (135.5 MiB) TX bytes:17815696 (16.9 MiB) Interrupt:193 Base address:0x2000 [root@Jiechao ~]# vi /etc/https://www.360docs.net/doc/d313785083.html,f [mysqld]在mysqld下添加以上两行。 server-id = 1 log-bin=jiechao-bin [root@Jiechao ~]# /etc/init.d/mysqld restart Shutting down MySQL[ OK ] Starting MySQL.[ OK ]

Java连接mysql数据库源代码

Java连接mysql数据库源代码 /** *@author mervyn *@Development_time 2011.3.12 *welcome to https://www.360docs.net/doc/d313785083.html,/mervyn_hb */ package src; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.sql.*; import java.util.*; public class MysqlConnectSystem { /** * @param args * @throws IOException */ public static void main(String[] args) throws SQLException, IOException { String Usename,KeyID,UrlString; //String DriverConnect; char MenuExitValue; String driver="com.mysql.jdbc.Driver"; Scanner EntryValue=new Scanner(System.in); System.out.println("欢迎使用MysqlConnectSystem信息管理系统!"); MysqlConnectSystem mysqlconnect=new MysqlConnectSystem(); MysqlConnectSystem mysqlinsert=new MysqlConnectSystem(); MysqlConnectSystem mysqlupdate=new MysqlConnectSystem(); MysqlConnectSystem mysqldelete=new MysqlConnectSystem(); System.out.println("请输入要登录的用户名:"); Usename=EntryValue.next(); System.out.println("请输入要登录的数据库的密码:"); KeyID=EntryValue.next(); System.out.println("请输入需要登录的数据库:"); UrlString="jdbc:mysql://127.0.0.1:3306/"+EntryValue.next(); do{ try { Class.forName(driver); Connection conn=DriverManager.getConnection(UrlString, Usename,

Mysql数据库安装及生产环境下主从库同步配置

Mysql数据库安装及生产环境下主从库同步配置

目录 1安装M YSQL数据库...................................................................................................................................... 2生产环境下M Y SQL数据库主从同步配置................................................................................................. 2.1 主数据库配置 (5) 2.2 从数据库配置 (5) 3监控服务器............................................................................................................................................... 3.1 监控主数据库服务器 (6) 3.2 监控从数据库服务器 (6)

1安装Mysql数据库 安装环境: 系统:CentOS-6.6-x86_64 数据库:MySQL-server-5.5.42-1.el6.x86_64;MySQL-client-5.5.42-1.el6.x86_64 1.SSH方式登录到MySQL服务器 2.创建存放安装文件的目录 [root@localhost /]# mkdir -p /sw/mysql55 3.上传安装文件到上一步创建的目录 4.检查是否已安装过MySQL [root@localhost /]# rpm -qa | grep -i mysql MySQL-client-5.5.42-1.el6.x86_64 MySQL-server-5.5.42-1.el6.x86_64 5.如果已安装则移除,否则请跳过此步 [root@localhost /]# yum -y remove MySQL-server-5.5.42-1.el6.x86_64 [root@localhost /]# yum -y remove MySQL-client-5.5.42-1.el6.x86_64 删除老版本mysql的开发头文件和库 rm -fr /usr/lib/mysql rm -fr /usr/include/mysql rm -fr /var/lib/mysql rm -f /etc/https://www.360docs.net/doc/d313785083.html,f 6.安装MySQL [root@localhost /]# cd /sw/mysql55/ [root@localhost mysql55]# rpm -ivh MySQL-server-5.5.42-1.el6.x86_64.rpm Preparing... ########################################### [100%] 1:MySQL-client ########################################### [100%] [root@localhost mysql55]# rpm -ivh MySQL-client-5.5.42-1.el6.x86_64.rpm Preparing... ########################################### [100%] 1:MySQL-server ########################################### [100%] 7.配置MySQL [root@localhost mysql55]# cp /usr/share/mysql/https://www.360docs.net/doc/d313785083.html,f /etc/https://www.360docs.net/doc/d313785083.html,f [root@localhost mysql55]# vi /etc/https://www.360docs.net/doc/d313785083.html,f [client] #password = your_password port = 8819 socket = /var/lib/mysql/mysql.sock default-character-set=utf8 [mysqld] port = 8819 socket = /var/lib/mysql/mysql.sock lower_case_table_names=1

mysql5.7.4数据库源码安装20150520

mysql数据库源码安装 1、安装环境 系统: Red Hat Enterprise Linux Server release 6.4 (Santiago)64位 CUP 4核内存8G硬盘空间160G 系统分区 /boot 300M /swap 4096M /home 102400M 把剩余全部空间分给根分区。 mysql源码包版本:mysql-5.7.4-m14.tar.gz 2 、升级cmake到2.8.9版本查看系统cmake 版本rpm -qa cmake 或cmake --version [root@gztestC118 home]# rpm -qa cmake cmake-2.6.4-5.el6.x86_64 [root@gztestC118 home]# cmake --version cmake version 2.6-patch 4 [root@gztestC118 home]#rpm -e cmake-2.6.4-5.el6.x86_64 删除旧的cmake [root@gztestC118 home]# tar –zxvf cmake-2.8.9.tar.gz [root@gztestC118 home]# cd cmake-2.8.9 [root@gztestC118 home]./configure [root@gztestC118 home]make &&make install [root@gztestC118 ~]# cmake –version 检查新版本号 cmake version 2.8.9 升级成功。 3、拷贝好RHEL系统镜像进入目录Packages [root@gztestC117 Packages]# ll *curses* 把下面安装包安装下。 -r--r--r--. 1 root root 274016 5月 12 06:16 ncurses-5.7-3.20090208.el6.x86_64.rpm -r--r--r--. 1 root root 62400 5月 12 06:16 ncurses-base-5.7-3.20090208.el6.x86_64.rpm -r--r--r--. 1 root root 656772 5月 12 06:16 ncurses-devel-5.7-3.20090208.el6.i686.rpm -r--r--r--. 1 root root 657088 5月 12 06:16 ncurses-devel-5.7-3.20090208.el6.x86_64.rpm -r--r--r--. 1 root root 256596 5月 12 06:16 ncurses-libs-5.7-3.20090208.el6.i686.rpm -r--r--r--. 1 root root 251756 5月 12 06:16 ncurses-libs-5.7-3.20090208.el6.x86_64.rpm -r--r--r--. 1 root root 559700 5月 12 06:16 ncurses-term-5.7-3.20090208.el6.x86_64.rpm [root@gztestC117 Packages]# rpm -ivh ncurses-5.7-3.20090208.el6.x86_64.rpm warning: ncurses-5.7-3.20090208.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY

MYSQL主从数据库介绍__主库__从库

如上图所示,整个数据层有Group1,Group2,Group3三个集群组成,这三个集群就是数据水平切分的结果,当然这三个集群也就组成了一个包含完整数据的DB。每一个Group包括1个Master(当然Master也可以是多个)和N个Slave,这些Master和Slave的数据是一致的。比如Group1中的一个slave发生了宕机现象,那么还有两个slave是可以用的,这样的模型总是不会造成某部分数据不能访问的问题,除非整个Group里的机器全部宕掉,但是考虑到这样的事情发生的概率非常小(除非是断电了,否则不易发生吧)。 在没有引入集群以前,我们的一次查询的过程大致如下:请求数据层,并传递必要的分库区分字段(通常情况下是user_id)?数据层根据区分字段Route到具体的DB?在这个确定的DB内进行数据操作。这是没有引入集群的情况,当时引入集群会是什么样子的呢?看图一即可得知,我们的路由器上规则和策略其实只能路由到具体的Group,也就是只能路由到一个虚拟的Group,这个Group并不是某个特定的物理服务器。接下来需要做的工作就是找到具体的物理的DB服务器,以进行具体的数据操作。基于这个环节的需求,我们引入了负载均衡器的概念(LB)。负载均衡器的职责就是定位到一台具体的DB服务器。具体的规则如下:负载均衡器会分析当前sql的读写特性,如果是写操作或者是要求实时性很强的操作的话,直接将查询负载分到Master,如果是读操作则通过负载均衡策略分配一个Slave。我们的负载均衡器的主要研究放向也就是负载分发策略,通常情况下负载均衡包括随机负载均衡和加权负载均衡。随机负载均衡很好理解,就是从N个Slave中随机选取一个Slave。这样的随机负载均衡是不考虑机器性能的,它默认为每台机器的性能是一样的。假如真实的情况是这样的,这样做也是无可厚非的。假如实际情况并非如此呢?每个Slave的机器物理性能和配置不一样的情况,再使用随机的不考虑性能的负载均衡,是非常不科学的,这样一来会给机器性能差的机器带来不必要的高负载,甚至带来宕机的危险,同时高性能的数据库服务器也不能充分发挥其物理性能。基于此考虑从,我们引入了加权负载均衡,也就是在我们的系统内部通过一定的接口,可以给每台DB服务器分配一个权值,然后再运行时LB根据权值在集群中的比重,分配一定比例的负载给该DB服务器。当然这样的概念的引入,无疑增大了系统的复杂性和可维护性。有得必有失,我们也没有办法逃过的。 有了分库,有了集群,有了负载均衡器,是不是就万事大吉了呢?事情远没有我们想象的那么简单。虽然有了这些东西,基本上能保证我们的数据层可以承受很大的压力,但是这样的设计并不能完全规避数据库宕机的危害。假如Group1中的slave2 宕机了,那么系统的LB并不能得知,这样的话其实是很危险的,因为LB不知道,它还会以为slave2为可用状态,所以还是会给slave2分配负载。这样一来,问题就出来了,客户端很自然的就会发生数据操作失败的错误或者异常。这样是非常不友好的!怎样解决这样的问

mysql源代码分析

Mysql源代码分析系列(2): 源代码结构 Mysql源代码主要包括客户端程序代码,服务器端代码,测试工具和一些库构成,下面我们对比较重要的目录做些介绍。 BUILD 这个目录在本系列的上篇文章中我们仔细看过,内含各种平台的编译脚本,这里就不仔细说了。 client 这个目录下有如下比较让人眼熟的文件: , , , ,等等,如果你编译一下就会发现那些眼熟的程序也出现了,比如mysql。明白了吧,这个目录就是那些客户端程序所在的目录。这个目录的内容也比较少,而且也不是我们阅读的重点。 Docs 这个目录包含了文档。 storage 这个目录包含了所谓的Mysql存储引擎(storage engine)。存储引擎是数据库系统的核心,封装了数据库文件的操作,是数据库系统是否强大最重要的因素。Mysql实现了一个抽象接口层,叫做handler(sql/,其中定义了接口函数,比如:ha_open, ha_index_end, ha_create等等,存储引擎需要实现这些接口才能被系统使用。这个接口定义超级复杂,有900多行:-(,不过我们暂时知道它是干什么的就好了,没必要深究每行代码。对于具体每种引擎的特点,我推荐大家去看mysql的在线文档:

应该能看到如下的目录: * innobase, innodb的目录,当前最流行的存储引擎 * myisam, 最早的Mysql存储引擎,一直到innodb出现以前,使用最广的引擎。 * heap, 基于内存的存储引擎 * federated, 一个比较新的存储引擎 * example, csv,这几个大家可以作为自己写存储引擎时的参考实现,比较容易读懂 mysys 包含了对于系统调用的封装,用以方便实现跨平台。大家看看文件名就大概知道是什么情况了。 sql 这个目录是另外一个大块头,你应该会看到,没错,这里就是数据库主程序mysqld所在的地方。大部分的系统流程都发生在这里。你还能看到, , ,等等,分别实现了对应的SQL命令。后面我们还要经常提到这个目录下的文件。 大概有如下及部分: SQL解析器代码: , , , 等,实现了对SQL语句的解析操作。

使用keepalived实现对mysql主从复制的主备自动切换

keepalived实现对mysql主从复制的主备自动切换使用MySQL+keepalived是一种非常好的解决方案,在MySQL-HA环境中,MySQL 互为主从关系,这样就保证了两台MySQL数据的一致性,然后用keepalived实现虚拟IP,通过keepalived自带的服务监控功能来实现MySQL故障时自动切换。 实验环境中用两台主机搭建了一个mysql主从复制的环境,两台机器分别安装了keepalived,用一个虚IP实现mysql服务器的主备自动切换功能. 模拟环境: VIP:192.168.1.197 :虚拟IP地址 Master:192.168.1.198 :主数据库IP地址 Slave:192.168.1.199 :从数据库IP地址 备注:MySQL的主从同步配置不在此文档中说明(前提:主从同步已完成) 安装步骤: 1、keepalived的安装 Yum install -y keepalived Chkconfig keepalived on 2、keepalived.conf文件的配置 Master:keepalived.conf vi /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { kenjin@https://www.360docs.net/doc/d313785083.html, } notification_email_from kenjin@https://www.360docs.net/doc/d313785083.html, smtp_connect_timeout 3 smtp_server https://www.360docs.net/doc/d313785083.html,

相关文档
最新文档