在这里让我们一起学习,一起提高!
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。
为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。
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;
要指定端口,要不用的是本实例默认端口。
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安装过程看 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表也会时时跟进的,达到让数据保持一致的效果。既然数据都在一个服务器能显示了。接下来改怎么做,就不用多说了吧。
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表也会时时跟进的,达到让数据保持一致的效果。既然数据都在一个服务器能显示了。接下来改怎么做,就不用多说了吧。
网上有诸多介绍源码安装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,完成。
./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,完成。
基本上用了mysql作为oltp业务的,基本上都会配置mysql的主从,一方面用mysql的主从做数据库的读写分离,另一方面mysql本身的单机备份不是很强,一般采用主从架构,在从上进行数据备份。
在这过程中或多或少出现一些主从不同步的情况,本文将对数据主从不同步的情况进行简单的总结,在看这篇文章请注意了本文主要从数据库层面上探讨数据库的主从不一致的情况,并不对主从的本身数据不一致引起的主从不同步进行说明:
1.网络的延迟
由于mysql主从复制是基于binlog的一种异步复制,通过网络传送binlog文件,理所当然网络延迟是主从不同步的绝大多数的原因,特别是跨机房的数据同步出现这种几率非常的大,所以做读写分离,注意从业务层进行前期设计。
在这过程中或多或少出现一些主从不同步的情况,本文将对数据主从不同步的情况进行简单的总结,在看这篇文章请注意了本文主要从数据库层面上探讨数据库的主从不一致的情况,并不对主从的本身数据不一致引起的主从不同步进行说明:
1.网络的延迟
由于mysql主从复制是基于binlog的一种异步复制,通过网络传送binlog文件,理所当然网络延迟是主从不同步的绝大多数的原因,特别是跨机房的数据同步出现这种几率非常的大,所以做读写分离,注意从业务层进行前期设计。
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
本站使用的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”。
解决办法:
原因:
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了
——————————————————————
可以通过/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搜索
Google搜索,全球最大搜索引擎,2004年8月在美国纳斯达克上市交易.Google从2000年开始提供中文搜索服务,目前是国内用户使用率仅次于百度的搜索引擎,提供网页、新闻、图片、论坛、本地等各种搜索
1、Google网页搜索的查询参数
Google搜索,全球最大搜索引擎,2004年8月在美国纳斯达克上市交易.Google从2000年开始提供中文搜索服务,目前是国内用户使用率仅次于百度的搜索引擎,提供网页、新闻、图片、论坛、本地等各种搜索
1、Google网页搜索的查询参数