- 浏览: 1036704 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
复制(Replication):通过复制执行过的语句或者数据集从主服务器上复制到一个或多个从服务器上实现多个数据库服务器之间数据库的同步。
MySQL's built-in replication capability is the foundation for building large, highperformance applications on top of MySQL.
MySQL supports two kinds of replication: statement-based replication(基于语句的复制) and row-based replication(基于行的复制).
Statement-based (or "logical") replication has been available since MySQL 3.23, and it's what most people are using in production today
Row-based replication is new in MySQL 5.1.
Both kinds work by recording changes in the master's binary log and replaying the log on the slave
基于语句的复制:记录改变数据库的语句,将语句在从服务器上在执行一遍,效率较高。
基于行的复制:将语句执行后的结果包括行的改变或者添加整个复制到从服务器中去。
混合方式的复制:由MySQL自动来判断。
复制过程:
主服务器上线程:mysql dump
从服务器两个线程:I/O thread ,SQL thread。
过程:从服务器的I/O 线程(主服务器的远程客户端)不断尝试连接主服务器,读取其二进制日志,主服务器收到请求后将检查自己的Binary Log并根据从服务器发来的Relay Log的相关信息来确认自从上次复制之后主服务器内容是否有更新,如果有,则主服务器启动mysql dump线程,将对方所请求的数据返回给从服务器,从服务器收到数据后会将数据保存在Relay Log。SQL thread 会不定期的读取Relay Log,如果发现有更新,则读取更新的语句或者行将其保存在从服务器上。
MySQL解决的问题:数据备份、负载均衡、高可用、数据分布(异地容灾)、升级测试。
下面我们来实现基于MySQL主从复制的架构:
Master:192.168.1.11 MySQL已安装完毕
[root@station39 ~]# vim /etc/my.cnf
log-bin=master-bin //** update line 50
log-bin-index=master-bin.index //** add line 51
server-id = 1 //** line 59
重启服务;
mysql> grant replication slave,replication client on *.* to rep@'192.168.1.%' identified by 'RedHat ';
Query OK, 0 rows affected (0.05 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> show processlist\G;
OK!此时可以看到Binlog Dump线程已经启动,创建数据库,表试试:
mysql> create database mydb;
Query OK, 1 row affected (0.03 sec)
mysql> use mydb
Database changed
mysql> create table t1( id int unsigned not null primary key, name char(30));
Query OK, 0 rows affected (0.05 sec)
mysql> insert into t1 values(1,'lucy'),(2,'lily');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from t1;
Slave:192.168.1.13 MySQl已安装完毕
[root@station26 ~]# vim /etc/my.cnf
server-id = 2 //** line 58
relay-log = slave-relay-bin //** line 59
relay-log-index = slave-relay-bin.index //** line 60
重启服务;
mysql> change master to
> master_host='192.168.1.11',
>master_port=3306,
> master_user='rep',
> master_password='RedHat ';
mysql> start slave;
mysql> show processlist\G;
OK,I/O thread,SQL thread 已经启动,等待主服务器数据发生更新……
主服务器上创建了mydb数据库和t1表,我们在从服务器中已经可以看到:
从Binary Log某一个点开始复制主服务器内容:
mysql> change master to
> master_host='192.168.1.11',
>master_port=3306,
> master_user='rep',
> master_password='RedHat ',
> master_log_file='master-bin.000001',
>master_log_pos=698;
PS:如果主服务器运行一段时间后才新建一个从服务器做复制,需要先将主服务器上的数据进行备份,然后将备份数据发给从服务器并在从服务器上还原之后再做复制。
主服务器:
mysql> flush tables with read lock;
mysql> flush logs;
mysql> \q
[root@station39~]# mysqldump -uroot --all-database --master-data=2 >/root/master.sql
[root@station39 ~]# vim /root/master.sql
--CHANGE MASTER TO
MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=106; //**备份内容截止点
mysql> unlock tables;
将数据发送到从服务器上:
[root@station39 ~]# scp /root/master.sql 192.168.1.13:/root
从服务器:
[root@station26 ~]# mysql -uroot
mysql> change master to
> master_host='192.168.1.11',
>master_port=3306,
> master_user='rep',
> master_password='RedHat ',
> master_log_file='master-bin.000003',
>master_log_pos=106;
日志相关参数:
mysql> show binlog events\G;
Event_type:This is the type of the event.
Server_id:This is the server ID of the server that created the event.
Log_name:The name of the file that stores the event.
Pos:This is the position of the file where the event starts; that is, it’s the first byte of the event.
End_log_pos:This gives the position in the file where the event ends and the next event starts.
Info:This is human-readable text with information about the event.
Filter 过滤功能:
在主服务器上过滤:
binlog-do-db:指定当前主服务器中仅允许客户端复制的数据库
binlog-do-ignore-db:指定当前主服务器哪些数据库的更新不记录在Binary Log中,可能会造成主服务器无法进行时间点恢复的致命错误。
在从服务器上过滤:
replicate-do-db=db:仅复制哪些数据库
If the current database of the statement is db, execute the statement
replicate-ignore-db=db:忽略哪些数据库
If the current database of the statement is db, discard the statement
replicate-do-table=table and replicate-wild-do-table=db_pattern.tbl_pattern
If the name of the table being updated is table or matches the pattern, execute updates to the table 使用通配符指定仅复制哪些表
replicate-ignore-table=table and replicate-wild-ignore-table=db_pattern.tbl_pattern
If the name of the table being updated is table or matches the pattern, discard updates to the table 使用通配符忽略哪些表
主从复制实现SSL加密功能:
主服务器兼做CA:
编辑/etc/hosts文件:
192.168.1.11 master.a.com master
192.168.1.13 slave.a.com slave
[root@station39 ~]# vim /etc/my.cnf
ssl //** mysqld 中添加
重启服务;
开始制作证书:
先将主服务器配置成CA:
[root@station39 CA]# vim ../tls/openssl.cnf
dir = /etc/pki/CA
[root@station39 CA]# umask 077;openssl genrsa 2048 > private/cakey.pem
[root@station39 CA]# openssl req -x509 -new -key private/cakey.pem -out cacert.pem
[root@station39 CA]# mkdir certs newcerts crl
[root@station39 CA]# touch index.txt serial
[root@station39 CA]# echo 01 >serial
CA已经创建完毕!
[root@station39 CA]# mkdir -pv /etc/mysql/certs
[root@station39 CA]# cd /etc/mysql/certs/
[root@station39 certs]# openssl genrsa 2048 >master_key.pem
[root@station39 certs]# openssl req -new -key master_key.pem -out master.csr
[root@station39 certs]# openssl ca -in master.csr -out master_cert.pem
给从服务器签署证书请求:
[root@station39 certs]# openssl ca -in /tmp/slave.csr -out slave_cert.pem
[root@station39 certs]# scp slave_cert.pem 192.168.1.13:/etc/mysql/certs
[root@station39 certs]# cp /etc/pki/CA/cacert.pem ./
[root@station39 certs]# scp /etc/pki/CA/cacert.pem 192.168.1.13:/etc/mysql/certs/
CA的私钥,主服务的私钥和证书都已准备好了:
开始MySQL的配置:
编辑/etc/my.cnf主配置文件:
ssl-ca = /etc/mysql/certs/cacert.pem
ssl-cert = /etc/mysql/certs/master_cert.pem
ssl-key = /etc/mysql/certs/master_key.pem
保存退出,重启服务;
mysql> grant replication slave,replication client on *.* to rep@'%.a.com' identified by 'RedHat ' require ssl;
mysql> flush privileges;
从服务器:
编辑/etc/hosts文件:
192.168.1.11 master.a.com master
192.168.1.13 slave.a.com slave
[root@station26 ~]# vim /etc/my.cnf
ssl //**mysqld 中添加
重启服务;
[root@station26 ~]# mkdir -pv /etc/mysql/certs
[root@station26 ~]# cd /etc/mysql/certs/
[root@station26 certs]# openssl genrsa 2048 > slave_key.pem
[root@station26 certs]# openssl req -new -key slave_key.pem -out slave.csr
[root@station26 certs]# scp slave.csr 192.168.1.11:/tmp
CA的私钥,从服务的私钥和证书都已准备好了:
mysql> change master to
-> master_host='master.a.com',
-> master_user='rep',
-> master_password='RedHat ',
-> master_ssl=1,
-> master_ssl_ca='/etc/mysql/certs/cacert.pem',
-> master_ssl_cert='/etc/mysql/certs/slave_cert.pem',
-> master_ssl_key='/etc/mysql/certs/slave_key.pem';
Query OK, 0 rows affected (0.02 sec)
mysql> start slave;
OK,此时主从服务器之间就可以使用SSL进行会话了。
层级复制:
配置一个中继服务器过程:
1 Configure the slave to forward any events executed by the slave thread by writing them to the binlog of the relay slave.
2 Change the storage engine for all tables on the relay slave to use the BLACKHOLE storage engine to preserve space and improve performance
3 Ensure that any new tables added to the relay also use the BLACKHOLE engine
mysql> SET GLOBAL STORAGE_ENGINE = 'BLACKHOLE';
relay> SHOW TABLES FROM mydb;
relay> SET SQL_LOG_BIN = 0;
relay> ALTER TABLE user_data ENGINE = 'BLACKHOLE';
…
…
relay> ALTER TABLE profile ENGINE = 'BLACKHOLE';
relay> SET SQL_BIN_LOG = 1;
MySQL优化
对查询做优化:为表添加正确的索引,并选择适当的索引类型。
对where,order by, group by中经常用到的字段做索引。
根据存储引擎来添加适当的索引:
MyISAM:B-tree,fulltext
InnodB:cluster,
聚簇索引(索引和数据放在一块),
非聚簇索引(索引种的指针指向数据在磁盘中的存储位置)
Memory:hash(键值对)
由于支持事务的引擎处理的额外机制比较多,所以MyISAM的性能优于InnodB
衡量索引设计好坏的两个变量:Handler_read_key(越大越好), Handler_read_rnd_next(越小越好)。
查询缓存:
have_query_cache :编译时是否启用了缓存功能
query_cache_limit:能够进行缓存的查询结果最大值
query_cache_min_res_unit
query_cache_size 查询缓存大小(在内存中所能使用的缓存大小) 0 关闭缓存
query_cache_type 查询缓存类型 0 OFF 1 ON 2 DEMAND 按需缓存
query_cache_wlock_invalidate
分析查询过程,在SQL语句前插入EXPLAIN
id 当前的select在总的查询中所处的层次,1 主查询;
select_type 查询类型,SIMPLE 没有子查询的简单查询
table 查询所关联的表
type 如何使用连接 ALL 全表扫描
possible_keys 可能会用到的键或者索引
key 真正用到的索引
key_len 所匹配的索引的长度
ref 使用外键
rows 当前查询所 处理的行数
Extra 额外信息
查询优化的几个原则:
1 能用连接尽可能不使用子查询;
2 尽可能使用会话变量及临时表来代替子查询(临时表,内存表),但临时表的大小不要超过系统限制的大小;
mysql> explain select name from stu where age> (select avg(age) from stu);
使用会话变量:
mysql> select @AVG:=avg(age) from stu;
mysql> select name from stu where age >@avg;
3 显式使用字段,尽量不使用通配符;
4 尽可能对连接中使用的字段使用索引。
对事务进行优化:
1 尽可能使用小事务 KISS(Keep It Simple,Stupid);
2 选择合适的事务隔离级别,默认可重读
3 尽可能避免死锁;
对存储例程优化:
1 遵循KISS法则;
2 存储例程中的每个SQL语句使用之前先优化;
对表设计进行优化:
1 降低冗余;
2 不要交叉使用存储引擎;
在服务器级别进行优化:
table_open_cache 表名缓存 ,同时打开在内存中表的数目
key_buffter_size 索引缓存大小
read_buffer_size 读缓存大小
thread_cache_size 线程缓存大小
binlog_cache_size 日志缓存大小
sort_buffer_size 定义排序缓存大小
MySQL性能测试
测试工具:mysqlslap
/usr/local/mysql/sql-bench下脚本
发表评论
-
Linux下MySql出现#1036 - Table ' user' is read only 错误解决方法(转)
2012-10-10 21:27 1587前几天网站备案被注销 ... -
修改MySQL数据库的root密码(转)
2012-10-10 20:58 832知识库 修改MySQL数据库的r ... -
通过分区(Partition)提升MySQL性能[转]
2012-09-24 09:49 714通过分区(Partition)提升MySQL性能 ... -
mysql 主从同步实例-从同步备份步骤
2011-07-13 10:25 14862009-09-13 16:28 环境: A、B的MyS ... -
mysql 主从同步原理
2011-07-13 10:24 10142009-09-13 16:12 Repli ... -
轻松构建MySQL高可用集群系统
2011-06-16 21:59 1037一、 MySQL复制的实现 ... -
BoneCP数据源配置详解
2011-05-13 17:23 2136BoneCP是一个快速,开源的数据库连接池。帮你管理数据连接让 ... -
Java中的BoneCP数据库连接池用法
2011-05-13 17:22 1351在2006年8月的时候我在项目中使用过Proxool这个Jav ... -
基于Hash算法的Mysql分表处理
2011-04-16 13:29 1196下面为您介绍的Mysql分表处理是基于Hash算法的,在了解该 ... -
RDMA技术分析
2011-02-28 19:24 1595RDMA技术分析 1 什么是RDMA ... -
MySQL海量数据优化
2011-02-26 09:52 1475MySQL海量数据优化 经常见到有人对M ... -
data too long for column
2008-10-17 00:09 1794mysql 写道 从MySql5中运行本地脚本创建数据库,当插 ... -
MySQL:InnoDB和MyISAM的差别
2008-10-17 00:05 1935InnoDB和MyISAM是在使用MySQL最常用的两个表类型 ...
相关推荐
DNA进化算法及其改进研究样本.doc
内容概要:本文详细介绍了使用Matlab编写的水果识别程序。首先简述了人工智能和机器学习在水果识别领域的应用背景,强调了Matlab作为强大编程环境的优势。接着,文章逐步讲解了水果识别程序的具体实现流程,涵盖数据预处理、特征提取、模型训练以及最终的识别算法实现。每个环节都采用了先进的技术和方法,如图像去噪、大小调整、深度学习算法(特别是卷积神经网络CNN),并通过训练神经网络模型来提升识别精度。此外,还讨论了相关技术手段和技术挑战,展示了Matlab在图像处理和计算机视觉方面的强大能力。 适合人群:对图像处理、机器学习感兴趣的科研人员、学生及工程师。 使用场景及目标:适用于希望深入了解Matlab环境下水果识别程序的设计与实现的研究者;旨在帮助使用者掌握从数据准备到模型部署的一系列技能,为实际项目提供理论支持和技术指导。 其他说明:文中不仅提供了详细的程序实现步骤,还对未来发展方向进行了展望,鼓励更多人参与到水果识别及相关领域的研究中。
scratch少儿编程逻辑思维游戏源码-修复塔.zip
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
scratch少儿编程逻辑思维游戏源码-天空之球.zip
# 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
scratch少儿编程逻辑思维游戏源码-土豆兄弟.zip
scratch少儿编程逻辑思维游戏源码-小鸟冒险.zip
scratch少儿编程逻辑思维游戏源码-跳进火山.zip
scratch少儿编程逻辑思维游戏源码-跳跃引擎.zip
scratch少儿编程逻辑思维游戏源码-旋转(4).zip
scratch少儿编程逻辑思维游戏源码-死里逃生.zip
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
HPERP商业软件实施解决方案模板.doc
# 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
Drogon是一个基于C++17/20的Http应用框架,使用Drogon可以方便的使用C++构建各种类型的Web应用服务端程序。
私有数据
scratch少儿编程逻辑思维游戏源码-双重困境.zip
# 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;