在这里让我们一起学习,一起提高!
TCMalloc(Thread-Caching Malloc)是google开发的开源工具──“google-perftools”中的成员,地址:http://code.google.com/p/gperftools/。与标准的glibc库的malloc相比,TCMalloc在内存的分配上效率和速度要高得多,可以在很大程度上提高MySQL服务器在高并发情况下的性能,降低系统负载。
为MySQL添加TCMalloc库的安装步骤(Linux环境):
1、64位操作系统请先安装libunwind库,32位操作系统不要安装。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。


wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-alpha.tar.gz
tar zxvf libunwind-0.99-alpha.tar.gz
cd libunwind-0.99-alpha/
CFLAGS=-fPIC ./configure
make CFLAGS=-fPIC
make CFLAGS=-fPIC install


2、安装google-perftools:


wget http://gperftools.googlecode.com/files/gperftools-2.0.tar.gz
tar zxvf gperftools-2.0.tar.gz
cd gperftools-2.0
./configure
make && make install
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig


3、修改MySQL启动脚本(根据你的MySQL安装位置而定):


vi /usr/local/mysql/bin/mysqld_safe


在# executing mysqld_safe的下一行,加上:

export LD_PRELOAD=/usr/local/lib/libtcmalloc.so


保存后退出,然后重启MySQL服务器。
4、使用lsof命令查看tcmalloc是否起效:

/usr/sbin/lsof -n | grep tcmalloc


如果发现以下信息,说明tcmalloc已经起效:

mysqld    10847   mysql  mem       REG        8,5  1203756   20484960 /usr/local/lib/libtcmalloc.so.0.0.0


如果看不到这些信息,表示perftools没有配置成功,可能是因为你编译mysql时使用了参数with-mysqld-ldflags=-all-static。


Tags: ,

tar zxvf mysql-5.5.3-m3.tar.gz
cd mysql-5.5.3-m3/

./configure --prefix=/usr/local/mysql2/ --with-tcp-port=3307 --with-unix-socket-path=/tmp/mysql2.sock --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugins=partition,innobase,myisammrg

make && make install

cp /usr/local/mysql2/share/mysql/my-medium.cnf /etc/my2.cnf

cp /usr/local/mysql2/share/mysql/mysql.server /etc/init.d/mysql2



修改服务文件

vi /etc/rc.d/init.d/mysql2


将引用的配置文件名称由my.cnf改为当前要使用的配置文件my2.cnf,将my.cnf改成my2.cnf


# Try to find basedir in /etc/my.cnf
  conf=/etc/my.cnf
  print_defaults=
  if test -r $conf
  then


在$bindir/mysqld_safe中添加--defaults-file=/etc/my2.cnf

修改成下面


# may be overwritten at next upgrade.
      $bindir/mysqld_safe --defaults-file=/etc/my2.cnf  --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &


保存。

初始化数据库

/usr/local/mysql2/bin/mysql_install_db --defaults-file=/etc/my2.cnf --basedir=/usr/local/mysql2/ --datadir=/usr/local/mysql2/var/ --user=mysql



chown -R mysql /usr/local/mysql2/var
chgrp -R mysql /usr/local/mysql2/.
chmod 755 /etc/init.d/mysql2
chkconfig --level 345 mysql2 on
service mysql2 start


至此安装完毕,可以启动一下,看是否有该进程

netstat -tlnap | grep mysql




/usr/local/mysql2/bin/mysql -uroot -p --socket=/tmp/mysql2.sock



change master to master_host='0.0.0.0', master_user='replication',master_password='00000', master_log_file='mysql-bin.000005', master_log_pos=107,MASTER_PORT=3306;


要指定端口,要不用的是本实例默认端口。

linux安装多个MYSQL实例 不指定

jed , 2013-3-20 11:04 , 服务器技术 , 评论(0) , 阅读(9034) , Via 本站原创
mysql创建多个实例,其实就是把DATA文件,SOCK,PORT指向不同的文件和端口

mysql安装过程看 http://blog.csdn.net/tangpengtao/article/details/6650424

先创建3307的DATA目录

[root@localhost mysql-5.5.15]# mkdir -p  /usr/local/mysql3307
[root@localhost mysql-5.5.15]#
[root@localhost mysql-5.5.15]#
[root@localhost mysql-5.5.15]# chmod +w /usr/local/mysql3307
[root@localhost mysql-5.5.15]# chown -R mysql:mysql /usr/local/mysql3307
[root@localhost mysql-5.5.15]#
[root@localhost mysql-5.5.15]# mkdir -p /var/mysql3307/
mkdir -p /var/mysql3307/data/
mkdir -p /var/mysql3307/log/
chown -R mysql:mysql /var/mysql3307/
[root@localhost mysql-5.5.15]# mkdir -p /var/mysql3307/data/
[root@localhost mysql-5.5.15]# mkdir -p /var/mysql3307/log/
[root@localhost mysql-5.5.15]# chown -R mysql:mysql /var/mysql3307/

mkdir -p  /usr/local/mysql3307

chmod +w /usr/local/mysql3307
chown -R mysql:mysql /usr/local/mysql3307
mkdir -p /var/mysql3307/
mkdir -p /var/mysql3307/data/

mkdir -p /var/mysql3307/log/

chown -R mysql:mysql /var/mysql3307/


[root@localhost mysql-5.5.15]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql3307 \
> -DMYSQL_UNIX_ADDR=/tmp/mysql3307.sock \
> -DDEFAULT_CHARSET=utf8 \
> -DDEFAULT_COLLATION=utf8_general_ci \
> -DWITH_EXTRA_CHARSETS:STRING=utf8,gbk \
> -DWITH_MYISAM_STORAGE_ENGINE=1 \
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \
> -DWITH_READLINE=1 \
> -DENABLED_LOCAL_INFILE=1 \
> -DMYSQL_DATADIR=/var/mysql3307/data \
> ;
-- MySQL 5.5.15
-- Configuring done
-- Generating done
-- Build files have been written to: /home/raycloud/software/mysql-5.5.15
[root@localhost mysql-5.5.15]#

[root@localhost mysql-5.5.15]# make
-- MySQL 5.5.15
-- Configuring done
-- Generating done
-- Build files have been written to: /home/raycloud/software/mysql-5.5.15
[  0%] Built target INFO_BIN



[root@localhost mysql-5.5.15]# make install

mysql 初始化安装

/usr/local/mysql/scripts/mysql_install_db \
--defaults-file=/etc/my.cnf \
--basedir=/usr/local/mysql \
--datadir=/var/mysql/data \
--user=mysql



进入到my.cnf然后vi my.cnf

[mysqld3]
port            = 3307  
socket          = /tmp/mysql3307.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
#wait_timeout=100
#interactive_timeout=100
max_connections=1400
user=root
datadir=/var/mysql3307/data

启动mysql

[root@localhost etc]# mysqld_safe --user=root --port=3307 --socket=/tmp/mysql3307.sock --datadir=/var/mysql3307/data &
[2] 7459
[root@localhost etc]# Starting mysqld daemon with databases from /var/mysql3307/data

查看mysql服务是否启动

[root@localhost etc]# ps -ef |grep 3307
root      7459  1624  0 20:18 pts/1    00:00:00 /bin/sh /usr/bin/mysqld_safe --user=root --port=3307 --socket=/tmp/mysql3307.sock --datadir=/var/mysql3307/data
root      7488  7459  0 20:18 pts/1    00:00:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/mysql3307/data --user=root --pid-file=/var/mysql3307/data/localhost.localdomain.pid --skip-external-locking --port=3307 --socket=/tmp/mysql3307.sock
root      7502  1624  0 20:19 pts/1    00:00:00 grep 3307
[root@localhost etc]#

进入mysqlclient 修改密码

[root@localhost etc]# mysql -uroot  --socket=/tmp/mysql3307.sock  --port=3307 -p
Enter password:

mysql> use mysql;
Database changed
mysql> update user set password=password('yourpassword') where user='root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4  Changed: 4  Warnings: 0
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)



mysql> set character_set_results=utf8
    ->
    ->
    -> ;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql>

停止mysql 3307

[root@localhost etc]# mysqladmin -uroot --socket=/tmp/mysql3307.sock --port=3307 -p shutdown
Enter password:
[root@localhost etc]#

启动3307数据库
[root@localhost etc]# /usr/local/mysql/bin/mysqld_multi  --defaults-file=/etc/my.cnf start  3
    大家都知道mysql目前(5.1.x是现行用的最多的版本,至于最新版5.5.x有什么新的强大功能,就不得而知了)还是不支持sql语句直接跨服务器查询数据和操作数据的。但是我们要的数据在两个不同的服务器上数据库上,该怎么办?其实办法还是有的,谁叫网络上的牛人多啊。我这里就讲一下通过mysql federated 引擎 变相实现跨服务器的效果。废话少说,直接上操作步骤!

           1.root登录mysql,输入show engines 结果如下(如果不尽相同纯属版本问题):

+------------+----------+----------------------------------------------------------------+
| Engine     | Support  | Comment                                                        |
+------------+----------+----------------------------------------------------------------+
| MyISAM       | DEFAULT  | Default engine as of MySQL 3.23 with great performance         |
| MEMORY      | YES      | Hash based, stored in memory, useful for temporary tables      |
| InnoDB        | YES      | Supports transactions, row-level locking, and foreign keys     |
| BerkeleyDB  | NO       | Supports transactions and page-level locking                   |
| BLACKHOLE | YES      | /dev/null storage engine (anything you write to it disappears) |
| EXAMPLE     | YES      | Example storage engine                                         |
| ARCHIVE      | YES      | Archive storage engine                                         |
| CSV             | YES      | CSV storage engine                                             |
| ndbcluster   | DISABLED | Clustered, fault-tolerant, memory-based tables                 |
| FEDERATED  | YES      | Federated MySQL storage engine                                 |
| MRG_MYISAM | YES      | Collection of identical MyISAM tables                          |
| ISAM       | NO       | Obsolete storage engine                                        |
+------------+----------+----------------------------------------------------------------+


             如果 federated 显示不为 yes,也不用紧张,速度找到my.cnf文件,改配置文件一般在/etc/my.cnf  这里指linux服务器上的路径。打开编辑,找到[mysqld] 并在下面添加一行 federated 然后保存退出,重启服务,再进mysql,输入show engines 看看是不是 federated 为yes了。 如果一开始就没有federated这个项,就麻烦了。这里不多说了。

          2.假设我有两个服务器A(192.168.0.10:3306) 和 B(192.168.0.11:3306)  

          在A上建数据库DB_A,DB_A上建表TB_A,TB_A上建字段id,name,sex....随意,然后添加一些测试数据。

          在B上建数据库DB_B,DB_B上建表TB_A(不过这里的表不要工具建,直接上代码、、)

          CREATE TABLE `TB_B` (
          `id` int(11) NOT NULL AUTO_INCREMENT,
          `name` varchar(20) DEFAULT NULL,
          `sex` varchar(4) DEFAULT NULL,
          PRIMARY KEY (`id`)
          ) ENGINE=federated connection ='mysql://root:123456@192.168.0.10:3306/DB_A/TB_A'
          DEFAULT CHARSET=utf8;

          注意:新建表的结构要和A服DB_A库TB_A表上的一致哦。。。

          3.一切搞定后,在B服DB_B库上输入 select * from DB_B.TB_B  看看什么结果。是不是A服DB_A库TB_A表上的数据都可以在B服务器上显示了!其实原理和同步差不多,然而如果TB_A表上数据有变动的话,TB_B表也会时时跟进的,达到让数据保持一致的效果。既然数据都在一个服务器能显示了。接下来改怎么做,就不用多说了吧。
Tags: ,
网上有诸多介绍源码安装Mysql时开启Federated引擎的方法,诸如:

./confiure --with-plugin-federated
./confiure --with-federated-storage-engine

但本人试验统统报unrecognized options错误,google了半天,居然是Mysql的bug ,至今未修复。

经测试(version:5.1.52)只有--with-plugins=federated能用:

./confiure --with-plugins=federated


安装完成后show engines查看:

+------------+--------+
| Engine | Support |
+------------+--------+
...
| FEDERATED | NO |
...
+------------+--------+

Federated引擎安装成功。

接着将其开启,修改my.cnf,在 [mysqld] 下添加一行:

federated

重启Mysql,完成。
Tags: ,

MySQL主从不一致的情况   不指定

jed , 2012-4-10 09:19 , 服务器技术 , 评论(0) , 阅读(4657) , Via 本站原创
基本上用了mysql作为oltp业务的,基本上都会配置mysql的主从,一方面用mysql的主从做数据库的读写分离,另一方面mysql本身的单机备份不是很强,一般采用主从架构,在从上进行数据备份。
在这过程中或多或少出现一些主从不同步的情况,本文将对数据主从不同步的情况进行简单的总结,在看这篇文章请注意了本文主要从数据库层面上探讨数据库的主从不一致的情况,并不对主从的本身数据不一致引起的主从不同步进行说明:
1.网络的延迟
由于mysql主从复制是基于binlog的一种异步复制,通过网络传送binlog文件,理所当然网络延迟是主从不同步的绝大多数的原因,特别是跨机房的数据同步出现这种几率非常的大,所以做读写分离,注意从业务层进行前期设计。

优化的内存访问 TCMalloc 不指定

jed , 2012-4-1 13:29 , 数据库技术 , 评论(0) , 阅读(5044) , Via 本站原创
TCMalloc (google-perftools) 是用于优化C++写的多线程应用,比glibc 2.3的malloc快。这个模块可以用来让MySQL在高并发下内存占用更加稳定。

本站使用的MySQL已经用 TCMalloc 优化过了。

详细的安装步骤:

#tar zxvf libunwind-0.98.6.tar.gz
#cd libunwind-0.98.6
#./configure
#make
#make install

#tar zxvf google-perftools-0.94.1.tar.gz
#cd google*
#./configure
#make
#make install

打开 mysqld_safe 脚本 (默认在/usr/bin/mysqld_safe)
在此脚本文件开始加入

LD_PRELOAD="/usr/local/lib/libtcmalloc.so"


#service mysql restart

当WEB服务器负载高的时候,经常会出现这种错误,
原因:
MySQL默认connect_timeout是5秒,超过了这个时间MySQL的server端就会返回“Bad handshake”。
解决办法:
以下是来自 http://wiki.ubuntu.org.cn/IptablesHowTo 上的配置说明

可以通过/sbin/iptables -F清除所有规则来暂时停止防火墙: (警告:这只适合在没有配置防火墙的环境中,如果已经配置过默认规则为deny的环境,此步骤将使系统的所有网络访问中断)

如果想清空的话,先执行
/sbin/iptables -P INPUT ACCEPT
然后执行
/sbin/iptables -F
通过iptables -L 看到如下信息
Chain INPUT (policy DROP 0 packets, 0 bytes) (注意 是DROP)
执行/sbin/iptables -F就肯定立马断开连接
当执行了
/sbin/iptables -P INPUT ACCEPT
再次通过iptables -L看信息的话就是
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
所以现在是可以安全使用
/sbin/iptables -F了

——————————————————————

google搜索参数详解 不指定

jed , 2011-3-29 00:06 , 搜索优化 , 评论(0) , 阅读(3578) , Via 本站原创
一、认识Google搜索
Google搜索,全球最大搜索引擎,2004年8月在美国纳斯达克上市交易.Google从2000年开始提供中文搜索服务,目前是国内用户使用率仅次于百度的搜索引擎,提供网页、新闻、图片、论坛、本地等各种搜索
1、Google网页搜索的查询参数
分页: 1/6 第一页 1 2 3 4 5 6 下页 最后页 [ 显示模式: 摘要 | 列表 ]