+ All Categories
Home > Documents > 一、 MySQL 服务器环境的安装配置 MySQL Replication MySQL MySQL2 MySQL...

一、 MySQL 服务器环境的安装配置 MySQL Replication MySQL MySQL2 MySQL...

Date post: 20-May-2020
Category:
Upload: others
View: 47 times
Download: 0 times
Share this document with a friend
42
1 MySQL MySQL MySQL MySQL 常见 Replication Replication Replication Replication 解析 一、MySQL 服务器环境的安装配置 二、MySQL 主从 Replication 的环境配置 三、MySQL 主主 Replication 的环境配置 四、MySQL2 主多从 Replication 的环境配置 五、MySQL Cluster 集群的安装配置 六、MySQL 的备份和恢复 七、MySQL 的性能分析及优化 八、压力测试 NicknameFalcon.C Email[email protected]
Transcript

1

MySQLMySQLMySQLMySQL 常见 ReplicationReplicationReplicationReplication 解析

一MySQL服务器环境的安装配置

二MySQL主从 Replication 的环境配置

三MySQL主主 Replication 的环境配置

四MySQL2 主多从 Replication 的环境配置

五MySQL Cluster集群的安装配置

六MySQL的备份和恢复

七MySQL的性能分析及优化

八压力测试

NicknameFalconCEmailFalcom520gmailcom

2

一MYSQL 服务器环境搭建

系统环境CentOS52 + MySQL5130 + InnoDB

以最简洁的方式安装 CentOS52选择服务器无 GUI 安装模式选择自定义包安装去

掉 mysqlhttpdnews等默认的安装包(让系统轻装上阵)

安装完成后进入系统新建需要的用户名及根据自己的规划来安装MYSQL 必须的文件目录

(以下全以 falcon用户名为例MySQL服务程序及数据日志文件将都在homefalcon 目录下

完成)

一MYSQLMYSQLMYSQLMYSQL 主从ReplicationReplicationReplicationReplication

应用场景

更新安装 MYSQL所依赖的包

接下来通过 falcon帐号来源码编译 MYSQL

[rootwwwfwphpcn 114843 ~] usrsbinuseradd falcon[rootwwwfwphpcn 114906 ~] usrbinpasswd falconChanging password for user falconNew UNIX passwordBAD PASSWORD it is based on a dictionary wordRetype new UNIX passwordpasswd all authentication tokens updated successfully[rootwwwfwphpcn 114910 ~][rootwwwfwphpcn 114910 ~] su falcon[falconwwwfwphpcn 114954 root]$[falconwwwfwphpcn 115005 root]$ cd ~[falconwwwfwphpcn 115338 ~]$ mkdir src[falconwwwfwphpcn 115338 ~]$ cd src[falconwwwfwphpcn 115349 ~src]$ wget httpwwwperconacommysql5130sourcemysql-5130targz 下载MySQL 原代码

[falconwwwfwphpcn 115 401 ~src]$ cd ~[falconwwwfwphpcn 115 402 ~]$ mkdir data logs 新建数据和日志文件目录

[falconwwwfwphpcn 115434 ~]$ su root[rootwwwfwphpcn 115434 homefalcon] yum -y install gcc gcc-c++ gcc-g77 flexbison autoconf automake bzip2-devel ncurses-devel openssl-devel libtool zlib-devellibxml2-devel libjpeg-devel libpng-devel libtiff-devel fontconfig-devel freetype-devellibXpm-devel gettext-devel curl curl-devel pam-devel e2fsprogs-devel krb5-devel libidnlibidn-devel

[rootwwwfwphpcn 121817 homefalcon] exitexit

3

安装完后MySQL 在homefalconmysql目录已经安装完成了接下来我们新建配置文件夹

及配置文件

到此MYSQL 服务器的环境已经搭建完毕了准备工作就已经完成了

二MySQL服务器主从 Replication 配置

应用场景

① DB负载过大相应速度比较慢

② DB 系统 IO操作频繁

③ 读数据量比较大DB读写分离

④ 数据库冗余备份

⑤ 并发量较大连接数耗尽

分析说明

[falconwwwfwphpcn 121820 ~]$ cd srcmysql-5130[falconwwwfwphpcn 121837 ~srcmysql-5130]$configure --prefix=homefalconmysql --enable-static --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-tcp-port=10000 --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --with-big-tables --with-plugins=max蓝色部分为主要需要配置的地方

[falconwwwfwphpcn 123017 ~srcmysql-5130]$ make ampamp make install

[falconwwwfwphpcn 135917 ~srcmysql-5130]$ ls ~mysqlbin docs include lib libexec mysql-test share sql-bench

[falconwwwfwphpcn 135920 ~mysql]$cd ~mysql[falconwwwfwphpcn 135924 ~mysql]$mkdir etc 新建数据配置文件目录

[falconwwwfwphpcn 135940 ~mysql]$cp sharemysqlmy-smallcnf etc

4

对于大并发量或者读写非常频繁的站点单台的数据库肯定会带来很多不确定的因

素为了最大可能的保存数据库的安全可靠性我们可以采取主从 Replication实现数

据的读写分离缓解单台 DB的压力

实例配置

主要配置说明(所有的配置都是在单台 Sever 下完成用端口来区分不同的 MySQL实例)这里我们才有一主两从的 Replication (注以下配置都没有做优化优化在MYSQL优化部分讲解)

主 DB19216823414010010 etc10010cnf从 DB119216823414010011 etc10011cnf

5

从 DB219216823414010012 etc10012cnf 配置流程

步骤一主的配置 10010cnf

[falconwwwfwphpcn 15474 0 ~mysqletc]$mkdir ~data10010[falconwwwfwphpcn 15474 1 ~mysqletc]$mkdir ~logs10010[falconwwwfwphpcn 154742 ~mysqletc]$ cp my-smallcnf 10010cnf[falconwwwfwphpcn 154751 ~mysqletc]$ vi 10010cnf[client]password = your_passwordport = 10010socket = tmpmysql-10010sock

TheMySQL server[mysqld]port = 10010socket = tmpmysql-10010sockskip-lockingdatadir = homefalcondata10010 数据目录地址

key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64Kskip-networkingserver-id = 10010

需要同步 binlog 的库

binlog-do-db=fwphp_data001 需要复制的两数据库

binlog-do-db=fwphp_data002

Uncomment the following if you want to log updateslog-bin=homefalconlogs10010mysql-bin binlog 日志路径

relay-log=homefalconlogs10010www-relay-bin 中继日志路径

binary logging format - mixed recommendedbinlog_format=mixed 二进制日志的格式 STATEMENTROWMIXEDdefault-storage-engine = innodb 默认为 innodb引擎

Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10010 InnoDB数据目录

innodb_data_file_path = ibdata110Mautoextend

6

步骤二初始化主 DB的数据库目录

步骤三启动主数据库

[falconwwwfwphpcn 155225 ~mysqletc]$ cd [falconwwwfwphpcn 155226 ~mysql]$ binmysql_install_db --datadir=~data10010

[falconwwwfwphpcn 155720 ~mysql]$ binmysqld_safe --defaults-file=etc10010cnf amp[falconwwwfwphpcn 155720 ~mysql]$ binmysql -uroot -p -S tmpmysql-10010sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 6Server version 5130-log Source distributionType help or h for help Type c to clear the buffer

mysqlgt

innodb_log_group_home_dir = homefalcondata10010 二进制日志目录

innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but beware of setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehash[isamchk]key_buffer = 8Msort_buffer_size = 8M[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

7

步骤四slave10011 的配置10011cnf

mysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TOuser001 IDENTIFIED BY user001 新建用于复制的帐号

mysqlgt flush privileges 刷新权限

mysqlgt create database fwphp_data001 创建数据库 fwphp_data001mysqlgt create database fwphp_data002 创建数据库 fwphp_data002

[falconwwwfwphpcn 155420 ~mysql]$ cp etcmy-smallcnf etc10011cnf[falconwwwfwphpcn 155420 ~mysql]$ vi etc10011cnf[client]port = 10011socket = tmpmysql-10011sock[mysqld]port = 10011socket = tmpmysql-10011sock

skip-lockingdatadir = homefalcondata10011 数据目录

key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

skip-networkingserver-id = 10011master-host=192168234140 主服务器 IPmaster-user=user001 复制帐号

master-password=user001 复制帐号的密码

master-port=10010 主服务器端口

master-connect-retry=5 连接到主服务器的间隔时间

replicate-do-db=fwphp_data001 需要复制的数据库名

replicate-do-db=fwphp_data002 需要复制的数据库名

Uncomment the following if you want to log updateslog-bin=homefalconlogs10011mysql-bin binlog 日志的存放路径

relay-log=homefalconlogs10011www-relay-bin 中继日志的存放路径

8

步骤五新建 slave10011的数据库文件及目录

在主数据库上对所有表进行读锁定

mysqlgt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 160436 ~data]$ cp -R 10010 10011 复制主服务器的数据文

件到从库

[falconwwwfwphpcn 160436 ~data]$ cd 10011[falconwwwfwphpcn 160532 ~data10011]$ rm wwwfwphpcn 删除 err和pid文件

binary logging format - mixed recommendedbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10011 InnoDB数据存放路径

innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10011 InnoDB日志存放路径

innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but beware of setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehashsafe-updates[isamchk]key_buffer = 8Msort_buffer_size = 8M[myisamchk]key_buffer = 8Msort_buffer_size = 8M[mysqlhotcopy]interactive-timeout

9

步骤六重复步骤四步骤五来新建 slave10012

到此主从数据库德配置文件及数据库文件新建完毕让我来启动从数据库吧

最后我们来测试主从 Replication 是否成功运行

Master上

mysqlgt show master status+------------------+----------+-----------------------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+-----------------------------+------------------+| mysql-bin000001 | 478 | fwphp_data001fwphp_data002 | |+------------------+----------+-----------------------------+------------------+1 row in set (001 sec)mysqlgt show processlist+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+| 4 | user001 | 19216823414044119 | NULL | Binlog Dump | 13847 | Has sent all binlogto slave waiting for binlog to be updated | NULL || 5 | user001 | 19216823414058946 | NULL | Binlog Dump | 13439 | Has sent all binlogto slave waiting for binlog to be updated | NULL || 6 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+3 rows in set (000 sec)

mysqlgt

[falconwwwfwphpcn 161035 ~mysql]$ binmysql -uroot -p -S tmpmysql-10011sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 4Server version 5130-log Source distribution

Type help or h for help Type c to clear the buffer

[falconwwwfwphpcn 160716 ~mysql]$ binmysqld_safe --defaults-file=etc10011cnf amp

[falconwwwfwphpcn 160740 ~mysql]$ binmysqld_safe --defaults-file=etc10011cnf amp

查看端口是否启动

[falconwwwfwphpcn 160752 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010010 0000 LISTENtcp 0 0 000010011 0000 LISTENtcp 0 0 000010012 0000 LISTEN

[falconwwwfwphpcn 160532 ~data10011]$ rm -rf ib_logfile 删除从主服务器数据

目录中的带过来的一些日志和错误日志等信息

10

同理在 slave 启动正常的情况下slave10012 会和 slave10011的状态一样

注如果有以下几种情况则说明 slave 没有能正常同步到master的数据如

1show slave status中 Slave_IO_State 的状态位空

2Slave_IO_Running NO3Slave_SQL_Running No4Last_IO_Error error connecting to master user00119216823414010001 - retry-time 1retries 86400这些情况下都表示主从同步失败那么怎么解决这些问题呢

在主上运行 show master status记录下 File 和 Position登录到从服务器上

Slave 10011上

mysqlgt show slave statusG 1 row

Slave_IO_State Waiting for master to send eventMaster_Host 192168234140Master_User user001Master_Port 10010

Connect_Retry 5Master_Log_File mysql-bin000001

Read_Master_Log_Pos 478Relay_Log_File www-relay-bin000003Relay_Log_Pos 251

Relay_Master_Log_File mysql-bin000001Slave_IO_Running YesSlave_SQL_Running YesReplicate_Do_DB fwphp_data001fwphp_data002

mysqlgt show processlist+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| 1 | system user | | NULL | Connect | 251480 | Waiting for master to send event| NULL || 2 | system user | | NULL | Connect | 251040 | Has read all relay log waitingfor the slave IO thread to update it | NULL || 4 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+3 rows in set (000 sec)

11

利用 change master to 修改从上同步主的 binlog 日志文件和同步点

常见方法是在从服务器上

这样在启动从后show slave status 就可以看到

Slave_IO_State Waiting for master to send eventSlave_IO_Running YesSlave_SQL_Running Yes以上出现 slave 不能同步主的数据主要可以通过这些方法来解决

下面来测试主从数据同步

Master上

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (001 sec)mysqlgt use fwphp_data001Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt stop slaveQuery OK 0 rows affected (001 sec)mysqlgt change master to

-gt master_host=192168234140 主服务器的 IP-gt master_user=user001 复制专业帐号

-gt master_password=user001 复制专用帐号的密码

-gt master_port=10010 主服务器端口

-gt master_log_file=mysql-bin000001 主服务器的当前 binlog 日志名

-gt master_log_pos=478 binlog 日志的还原点

-gt master_connect_retry=5 连接到主服务器同步的时间间隔

mysqlgt start slaveQuery OK 0 rows affected (001 sec)

12

在从库上查看是否数据同步成功

经过以上这些测试说明MySQL的主从配置成功在这个过程中或许会出现各种各样的错

误信息不要担心只要你把握住出现错误首先看错误日志然后把出现错误的主要信息放

到网上搜索一下会有很多解决方法呈现在你的面前最好不要忘了将出现错误的症状错

mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))ERROR 1223 (HY000) Cant execute the query because you have a conflicting read lockmysqlgt 出现以上错误主要是在上面步骤五时对主库的表进行了读锁定

mysqlgt unlock tablesQuery OK 0 rows affected (000 sec)mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))Query OK 0 rows affected (001 sec)mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (000 sec)

Slave10011 和 slave10012 上

mysqlgt use fwphp_data001Database changedmysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (001 sec)

mysqlgt desc tb001+----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+----------------+| uid | int(11) | NO | PRI | NULL | auto_increment || username | varchar(20) | NO | | NULL | |+----------+-------------+------+-----+---------+----------------+2 rows in set (001 sec)

13

误代码及解决方法发到 linuxtoneorg让更多的初学者避免出现类似的错误而无法进行以下

的学习

三MySQL 主主 Replication 解析

应用场景

① 双机冗余

② 写压力比较大

③ 数据高可用性安全性较强的场合

④ 单点故障

分析说明

对于写数据量大非常大的场合单台DB已经无法满足应用的需要这时可以

横向扩展 DB应用 2 台DB做主主的 Replication减小数据的写压力同时双主

数据保证了数据的完整性和安全性避免了单点故障

实例配置

配置说明

14

主主测试主要在一台服务器上测试所以我开起了 2 实例的方式来模拟主主数据库的复

制通过以上图片可以看出主要配置

Master119216823414010013 配置文件homefalconmysqletc10013cnfMaster219216823414010014 配置文件homefalconmysqletc10014cnf

配置过程

步骤一新建 master1master2的数据目录及配置文件

步骤二设置 master1的配置文件 10013cnf

[falconwwwfwphpcn 210614 ~mysql]$ vi etc10013cnf[client]password = your_passwordport = 10013socket = tmpmysql-10013sock

[mysqld]port = 10013socket = tmpmysql-10013sockskip-lockingdatadir = homefalcondata10013key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

server-id = 10013另一主的连接信息

master-host=192168234140master-user=user001master-password=user001

[falconwwwfwphpcn 210133 ~mysql]$ cp etcmy-smallcnf etc10013cnf[falconwwwfwphpcn 210144 ~mysql]$ cd [falconwwwfwphpcn 210223 ~]$ mkdir data10013[falconwwwfwphpcn 210223 ~]$ mkdir logs 10013 logs 10014[falconwwwfwphpcn 210317 ~]$cd mysql[falconwwwfwphpcn 210317 ~mysql]$ binmysql_install_db --datadir=homefalcondata10013 初始化 10013数据目录

15

master-port=10014master-connect-retry=1需要同步 binlog 的库

binlog-do-db=fwphp_data001binlog-do-db=fwphp_data002

解决双主主键冲突问题一个主用 auto_increment_increment=1auto_increment_offset=1的话另一个

应该是 auto_increment_increment=2auto_increment_offset=1auto_increment_increment 为步长

auto_increment_offset 从多少开始

auto_increment_increment=1 解决主键冲突master2上应该都设为 2auto_increment_offset=1

解决双主之间各有从时从不能更新另一个主插入的新数据

从服务器从主服务器那更新 binlog 日志到中继日志时同时也更新也更新自己的

binlog 日志

log-slave-updates

log-bin=homefalconlogs10013mysql-binrelay-log=homefalconlogs10013www-relay-binbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10013innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10013innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but bewareof setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M

16

步骤三初始化 master1

[mysql]no-auto-rehash

[isamchk]key_buffer = 8Msort_buffer_size = 8M

[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

[falconwwwfwphpcn 211543 ~mysql]$ binmysqld_safe --defaults-file=etc10013cnf amp[falconwwwfwphpcn 211550 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010013 0000 LISTEN[falconwwwfwphpcn 211552 ~mysql]$ binmysql -uroot -p -S tmpmysql-10013sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130-log Source distributionType help or h for help Type c to clear the buffermysqlgtmysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TO

-gt user001IDENTIFIED BY user001 新建复制帐号

Query OK 0 rows affected (000 sec)mysqlgt flush privileges 权限刷新使其立即生效

Query OK 0 rows affected (000 sec)mysqlgt create database fwphp_data001Query OK 1 row affected (000 sec)mysqlgt create database fwphp_data002Query OK 1 row affected (000 sec)

17

步骤四同步骤二设置 master2的 10014cnf文件(注意端口及目录名为 10014)

步骤五新建及初始化 master2数据文件

在master1下设置只读模式锁定表的写入保持主从之间的数据一致性

Mysql gt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 212002 ~]$ cp -R data10013 data10014[falconwwwfwphpcn 212006 ~]$ ls data10014fwphp_data001 fwphp_data002 ibdata1 ib_logfile0 ib_logfile1 masterinfo mysqlrelay-loginfo test wwwfwphpcnerr wwwfwphpcnpid[falconwwwfwphpcn 212008 ~]$ rm data10014ib_logfile

[falconwwwfwphpcn 211347 ~mysql]$ cp etc10013cnf etc10014cnf[falconwwwfwphpcn 211347 ~mysql]$ vi etc10014cnfserver-id = 10014另一主的连接信息

master-host=192168234140master-user=user001master-password=user001master-port=10013 此处为另一个主的端口

master-connect-retry=1 更主那更新 binlog 的时间间隔为 1 秒

auto_increment_increment=2 解决 2主在同时插入数据时的主键冲突问题

auto_increment_offset=2log-slave-updates

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (000 sec)

18

到此主主之间的复制就已经准备好了下面我们来测试一下主主之间数据的复制吧

在测试之前确保master1和master2 的 auto_increment_incrementauto_increment_offset值不能一样否则就会有主键冲突问题存在

测试开始

1先往 master1的 fwphp_data001中新建一个表

create table tb002(uid int not null auto_incrementuser varchar(20) not nullprimary key(uid))2在 master2上查看是否同步了 tb002表

[falconwwwfwphpcn 212012 ~]$ rm data10014wwwfwphpcn 删除 pid 和 err文件

[falconwwwfwphpcn 212441 ~]$ rm data10014info 删除中继日志文件

[falconwwwfwphpcn 212405 ~mysql]$ binmysql -uroot -p -S tmpmysql-10014sockmysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 | 不需要重新在此库上重建

| fwphp_data002 |

Master1mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 |+--------------------------+-------+2 rows in set (000 sec)Master2mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 || auto_increment_offset | 2 |+--------------------------+-------+2 rows in set (000 sec)

mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

2

一MYSQL 服务器环境搭建

系统环境CentOS52 + MySQL5130 + InnoDB

以最简洁的方式安装 CentOS52选择服务器无 GUI 安装模式选择自定义包安装去

掉 mysqlhttpdnews等默认的安装包(让系统轻装上阵)

安装完成后进入系统新建需要的用户名及根据自己的规划来安装MYSQL 必须的文件目录

(以下全以 falcon用户名为例MySQL服务程序及数据日志文件将都在homefalcon 目录下

完成)

一MYSQLMYSQLMYSQLMYSQL 主从ReplicationReplicationReplicationReplication

应用场景

更新安装 MYSQL所依赖的包

接下来通过 falcon帐号来源码编译 MYSQL

[rootwwwfwphpcn 114843 ~] usrsbinuseradd falcon[rootwwwfwphpcn 114906 ~] usrbinpasswd falconChanging password for user falconNew UNIX passwordBAD PASSWORD it is based on a dictionary wordRetype new UNIX passwordpasswd all authentication tokens updated successfully[rootwwwfwphpcn 114910 ~][rootwwwfwphpcn 114910 ~] su falcon[falconwwwfwphpcn 114954 root]$[falconwwwfwphpcn 115005 root]$ cd ~[falconwwwfwphpcn 115338 ~]$ mkdir src[falconwwwfwphpcn 115338 ~]$ cd src[falconwwwfwphpcn 115349 ~src]$ wget httpwwwperconacommysql5130sourcemysql-5130targz 下载MySQL 原代码

[falconwwwfwphpcn 115 401 ~src]$ cd ~[falconwwwfwphpcn 115 402 ~]$ mkdir data logs 新建数据和日志文件目录

[falconwwwfwphpcn 115434 ~]$ su root[rootwwwfwphpcn 115434 homefalcon] yum -y install gcc gcc-c++ gcc-g77 flexbison autoconf automake bzip2-devel ncurses-devel openssl-devel libtool zlib-devellibxml2-devel libjpeg-devel libpng-devel libtiff-devel fontconfig-devel freetype-devellibXpm-devel gettext-devel curl curl-devel pam-devel e2fsprogs-devel krb5-devel libidnlibidn-devel

[rootwwwfwphpcn 121817 homefalcon] exitexit

3

安装完后MySQL 在homefalconmysql目录已经安装完成了接下来我们新建配置文件夹

及配置文件

到此MYSQL 服务器的环境已经搭建完毕了准备工作就已经完成了

二MySQL服务器主从 Replication 配置

应用场景

① DB负载过大相应速度比较慢

② DB 系统 IO操作频繁

③ 读数据量比较大DB读写分离

④ 数据库冗余备份

⑤ 并发量较大连接数耗尽

分析说明

[falconwwwfwphpcn 121820 ~]$ cd srcmysql-5130[falconwwwfwphpcn 121837 ~srcmysql-5130]$configure --prefix=homefalconmysql --enable-static --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-tcp-port=10000 --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --with-big-tables --with-plugins=max蓝色部分为主要需要配置的地方

[falconwwwfwphpcn 123017 ~srcmysql-5130]$ make ampamp make install

[falconwwwfwphpcn 135917 ~srcmysql-5130]$ ls ~mysqlbin docs include lib libexec mysql-test share sql-bench

[falconwwwfwphpcn 135920 ~mysql]$cd ~mysql[falconwwwfwphpcn 135924 ~mysql]$mkdir etc 新建数据配置文件目录

[falconwwwfwphpcn 135940 ~mysql]$cp sharemysqlmy-smallcnf etc

4

对于大并发量或者读写非常频繁的站点单台的数据库肯定会带来很多不确定的因

素为了最大可能的保存数据库的安全可靠性我们可以采取主从 Replication实现数

据的读写分离缓解单台 DB的压力

实例配置

主要配置说明(所有的配置都是在单台 Sever 下完成用端口来区分不同的 MySQL实例)这里我们才有一主两从的 Replication (注以下配置都没有做优化优化在MYSQL优化部分讲解)

主 DB19216823414010010 etc10010cnf从 DB119216823414010011 etc10011cnf

5

从 DB219216823414010012 etc10012cnf 配置流程

步骤一主的配置 10010cnf

[falconwwwfwphpcn 15474 0 ~mysqletc]$mkdir ~data10010[falconwwwfwphpcn 15474 1 ~mysqletc]$mkdir ~logs10010[falconwwwfwphpcn 154742 ~mysqletc]$ cp my-smallcnf 10010cnf[falconwwwfwphpcn 154751 ~mysqletc]$ vi 10010cnf[client]password = your_passwordport = 10010socket = tmpmysql-10010sock

TheMySQL server[mysqld]port = 10010socket = tmpmysql-10010sockskip-lockingdatadir = homefalcondata10010 数据目录地址

key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64Kskip-networkingserver-id = 10010

需要同步 binlog 的库

binlog-do-db=fwphp_data001 需要复制的两数据库

binlog-do-db=fwphp_data002

Uncomment the following if you want to log updateslog-bin=homefalconlogs10010mysql-bin binlog 日志路径

relay-log=homefalconlogs10010www-relay-bin 中继日志路径

binary logging format - mixed recommendedbinlog_format=mixed 二进制日志的格式 STATEMENTROWMIXEDdefault-storage-engine = innodb 默认为 innodb引擎

Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10010 InnoDB数据目录

innodb_data_file_path = ibdata110Mautoextend

6

步骤二初始化主 DB的数据库目录

步骤三启动主数据库

[falconwwwfwphpcn 155225 ~mysqletc]$ cd [falconwwwfwphpcn 155226 ~mysql]$ binmysql_install_db --datadir=~data10010

[falconwwwfwphpcn 155720 ~mysql]$ binmysqld_safe --defaults-file=etc10010cnf amp[falconwwwfwphpcn 155720 ~mysql]$ binmysql -uroot -p -S tmpmysql-10010sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 6Server version 5130-log Source distributionType help or h for help Type c to clear the buffer

mysqlgt

innodb_log_group_home_dir = homefalcondata10010 二进制日志目录

innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but beware of setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehash[isamchk]key_buffer = 8Msort_buffer_size = 8M[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

7

步骤四slave10011 的配置10011cnf

mysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TOuser001 IDENTIFIED BY user001 新建用于复制的帐号

mysqlgt flush privileges 刷新权限

mysqlgt create database fwphp_data001 创建数据库 fwphp_data001mysqlgt create database fwphp_data002 创建数据库 fwphp_data002

[falconwwwfwphpcn 155420 ~mysql]$ cp etcmy-smallcnf etc10011cnf[falconwwwfwphpcn 155420 ~mysql]$ vi etc10011cnf[client]port = 10011socket = tmpmysql-10011sock[mysqld]port = 10011socket = tmpmysql-10011sock

skip-lockingdatadir = homefalcondata10011 数据目录

key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

skip-networkingserver-id = 10011master-host=192168234140 主服务器 IPmaster-user=user001 复制帐号

master-password=user001 复制帐号的密码

master-port=10010 主服务器端口

master-connect-retry=5 连接到主服务器的间隔时间

replicate-do-db=fwphp_data001 需要复制的数据库名

replicate-do-db=fwphp_data002 需要复制的数据库名

Uncomment the following if you want to log updateslog-bin=homefalconlogs10011mysql-bin binlog 日志的存放路径

relay-log=homefalconlogs10011www-relay-bin 中继日志的存放路径

8

步骤五新建 slave10011的数据库文件及目录

在主数据库上对所有表进行读锁定

mysqlgt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 160436 ~data]$ cp -R 10010 10011 复制主服务器的数据文

件到从库

[falconwwwfwphpcn 160436 ~data]$ cd 10011[falconwwwfwphpcn 160532 ~data10011]$ rm wwwfwphpcn 删除 err和pid文件

binary logging format - mixed recommendedbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10011 InnoDB数据存放路径

innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10011 InnoDB日志存放路径

innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but beware of setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehashsafe-updates[isamchk]key_buffer = 8Msort_buffer_size = 8M[myisamchk]key_buffer = 8Msort_buffer_size = 8M[mysqlhotcopy]interactive-timeout

9

步骤六重复步骤四步骤五来新建 slave10012

到此主从数据库德配置文件及数据库文件新建完毕让我来启动从数据库吧

最后我们来测试主从 Replication 是否成功运行

Master上

mysqlgt show master status+------------------+----------+-----------------------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+-----------------------------+------------------+| mysql-bin000001 | 478 | fwphp_data001fwphp_data002 | |+------------------+----------+-----------------------------+------------------+1 row in set (001 sec)mysqlgt show processlist+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+| 4 | user001 | 19216823414044119 | NULL | Binlog Dump | 13847 | Has sent all binlogto slave waiting for binlog to be updated | NULL || 5 | user001 | 19216823414058946 | NULL | Binlog Dump | 13439 | Has sent all binlogto slave waiting for binlog to be updated | NULL || 6 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+3 rows in set (000 sec)

mysqlgt

[falconwwwfwphpcn 161035 ~mysql]$ binmysql -uroot -p -S tmpmysql-10011sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 4Server version 5130-log Source distribution

Type help or h for help Type c to clear the buffer

[falconwwwfwphpcn 160716 ~mysql]$ binmysqld_safe --defaults-file=etc10011cnf amp

[falconwwwfwphpcn 160740 ~mysql]$ binmysqld_safe --defaults-file=etc10011cnf amp

查看端口是否启动

[falconwwwfwphpcn 160752 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010010 0000 LISTENtcp 0 0 000010011 0000 LISTENtcp 0 0 000010012 0000 LISTEN

[falconwwwfwphpcn 160532 ~data10011]$ rm -rf ib_logfile 删除从主服务器数据

目录中的带过来的一些日志和错误日志等信息

10

同理在 slave 启动正常的情况下slave10012 会和 slave10011的状态一样

注如果有以下几种情况则说明 slave 没有能正常同步到master的数据如

1show slave status中 Slave_IO_State 的状态位空

2Slave_IO_Running NO3Slave_SQL_Running No4Last_IO_Error error connecting to master user00119216823414010001 - retry-time 1retries 86400这些情况下都表示主从同步失败那么怎么解决这些问题呢

在主上运行 show master status记录下 File 和 Position登录到从服务器上

Slave 10011上

mysqlgt show slave statusG 1 row

Slave_IO_State Waiting for master to send eventMaster_Host 192168234140Master_User user001Master_Port 10010

Connect_Retry 5Master_Log_File mysql-bin000001

Read_Master_Log_Pos 478Relay_Log_File www-relay-bin000003Relay_Log_Pos 251

Relay_Master_Log_File mysql-bin000001Slave_IO_Running YesSlave_SQL_Running YesReplicate_Do_DB fwphp_data001fwphp_data002

mysqlgt show processlist+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| 1 | system user | | NULL | Connect | 251480 | Waiting for master to send event| NULL || 2 | system user | | NULL | Connect | 251040 | Has read all relay log waitingfor the slave IO thread to update it | NULL || 4 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+3 rows in set (000 sec)

11

利用 change master to 修改从上同步主的 binlog 日志文件和同步点

常见方法是在从服务器上

这样在启动从后show slave status 就可以看到

Slave_IO_State Waiting for master to send eventSlave_IO_Running YesSlave_SQL_Running Yes以上出现 slave 不能同步主的数据主要可以通过这些方法来解决

下面来测试主从数据同步

Master上

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (001 sec)mysqlgt use fwphp_data001Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt stop slaveQuery OK 0 rows affected (001 sec)mysqlgt change master to

-gt master_host=192168234140 主服务器的 IP-gt master_user=user001 复制专业帐号

-gt master_password=user001 复制专用帐号的密码

-gt master_port=10010 主服务器端口

-gt master_log_file=mysql-bin000001 主服务器的当前 binlog 日志名

-gt master_log_pos=478 binlog 日志的还原点

-gt master_connect_retry=5 连接到主服务器同步的时间间隔

mysqlgt start slaveQuery OK 0 rows affected (001 sec)

12

在从库上查看是否数据同步成功

经过以上这些测试说明MySQL的主从配置成功在这个过程中或许会出现各种各样的错

误信息不要担心只要你把握住出现错误首先看错误日志然后把出现错误的主要信息放

到网上搜索一下会有很多解决方法呈现在你的面前最好不要忘了将出现错误的症状错

mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))ERROR 1223 (HY000) Cant execute the query because you have a conflicting read lockmysqlgt 出现以上错误主要是在上面步骤五时对主库的表进行了读锁定

mysqlgt unlock tablesQuery OK 0 rows affected (000 sec)mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))Query OK 0 rows affected (001 sec)mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (000 sec)

Slave10011 和 slave10012 上

mysqlgt use fwphp_data001Database changedmysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (001 sec)

mysqlgt desc tb001+----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+----------------+| uid | int(11) | NO | PRI | NULL | auto_increment || username | varchar(20) | NO | | NULL | |+----------+-------------+------+-----+---------+----------------+2 rows in set (001 sec)

13

误代码及解决方法发到 linuxtoneorg让更多的初学者避免出现类似的错误而无法进行以下

的学习

三MySQL 主主 Replication 解析

应用场景

① 双机冗余

② 写压力比较大

③ 数据高可用性安全性较强的场合

④ 单点故障

分析说明

对于写数据量大非常大的场合单台DB已经无法满足应用的需要这时可以

横向扩展 DB应用 2 台DB做主主的 Replication减小数据的写压力同时双主

数据保证了数据的完整性和安全性避免了单点故障

实例配置

配置说明

14

主主测试主要在一台服务器上测试所以我开起了 2 实例的方式来模拟主主数据库的复

制通过以上图片可以看出主要配置

Master119216823414010013 配置文件homefalconmysqletc10013cnfMaster219216823414010014 配置文件homefalconmysqletc10014cnf

配置过程

步骤一新建 master1master2的数据目录及配置文件

步骤二设置 master1的配置文件 10013cnf

[falconwwwfwphpcn 210614 ~mysql]$ vi etc10013cnf[client]password = your_passwordport = 10013socket = tmpmysql-10013sock

[mysqld]port = 10013socket = tmpmysql-10013sockskip-lockingdatadir = homefalcondata10013key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

server-id = 10013另一主的连接信息

master-host=192168234140master-user=user001master-password=user001

[falconwwwfwphpcn 210133 ~mysql]$ cp etcmy-smallcnf etc10013cnf[falconwwwfwphpcn 210144 ~mysql]$ cd [falconwwwfwphpcn 210223 ~]$ mkdir data10013[falconwwwfwphpcn 210223 ~]$ mkdir logs 10013 logs 10014[falconwwwfwphpcn 210317 ~]$cd mysql[falconwwwfwphpcn 210317 ~mysql]$ binmysql_install_db --datadir=homefalcondata10013 初始化 10013数据目录

15

master-port=10014master-connect-retry=1需要同步 binlog 的库

binlog-do-db=fwphp_data001binlog-do-db=fwphp_data002

解决双主主键冲突问题一个主用 auto_increment_increment=1auto_increment_offset=1的话另一个

应该是 auto_increment_increment=2auto_increment_offset=1auto_increment_increment 为步长

auto_increment_offset 从多少开始

auto_increment_increment=1 解决主键冲突master2上应该都设为 2auto_increment_offset=1

解决双主之间各有从时从不能更新另一个主插入的新数据

从服务器从主服务器那更新 binlog 日志到中继日志时同时也更新也更新自己的

binlog 日志

log-slave-updates

log-bin=homefalconlogs10013mysql-binrelay-log=homefalconlogs10013www-relay-binbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10013innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10013innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but bewareof setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M

16

步骤三初始化 master1

[mysql]no-auto-rehash

[isamchk]key_buffer = 8Msort_buffer_size = 8M

[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

[falconwwwfwphpcn 211543 ~mysql]$ binmysqld_safe --defaults-file=etc10013cnf amp[falconwwwfwphpcn 211550 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010013 0000 LISTEN[falconwwwfwphpcn 211552 ~mysql]$ binmysql -uroot -p -S tmpmysql-10013sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130-log Source distributionType help or h for help Type c to clear the buffermysqlgtmysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TO

-gt user001IDENTIFIED BY user001 新建复制帐号

Query OK 0 rows affected (000 sec)mysqlgt flush privileges 权限刷新使其立即生效

Query OK 0 rows affected (000 sec)mysqlgt create database fwphp_data001Query OK 1 row affected (000 sec)mysqlgt create database fwphp_data002Query OK 1 row affected (000 sec)

17

步骤四同步骤二设置 master2的 10014cnf文件(注意端口及目录名为 10014)

步骤五新建及初始化 master2数据文件

在master1下设置只读模式锁定表的写入保持主从之间的数据一致性

Mysql gt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 212002 ~]$ cp -R data10013 data10014[falconwwwfwphpcn 212006 ~]$ ls data10014fwphp_data001 fwphp_data002 ibdata1 ib_logfile0 ib_logfile1 masterinfo mysqlrelay-loginfo test wwwfwphpcnerr wwwfwphpcnpid[falconwwwfwphpcn 212008 ~]$ rm data10014ib_logfile

[falconwwwfwphpcn 211347 ~mysql]$ cp etc10013cnf etc10014cnf[falconwwwfwphpcn 211347 ~mysql]$ vi etc10014cnfserver-id = 10014另一主的连接信息

master-host=192168234140master-user=user001master-password=user001master-port=10013 此处为另一个主的端口

master-connect-retry=1 更主那更新 binlog 的时间间隔为 1 秒

auto_increment_increment=2 解决 2主在同时插入数据时的主键冲突问题

auto_increment_offset=2log-slave-updates

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (000 sec)

18

到此主主之间的复制就已经准备好了下面我们来测试一下主主之间数据的复制吧

在测试之前确保master1和master2 的 auto_increment_incrementauto_increment_offset值不能一样否则就会有主键冲突问题存在

测试开始

1先往 master1的 fwphp_data001中新建一个表

create table tb002(uid int not null auto_incrementuser varchar(20) not nullprimary key(uid))2在 master2上查看是否同步了 tb002表

[falconwwwfwphpcn 212012 ~]$ rm data10014wwwfwphpcn 删除 pid 和 err文件

[falconwwwfwphpcn 212441 ~]$ rm data10014info 删除中继日志文件

[falconwwwfwphpcn 212405 ~mysql]$ binmysql -uroot -p -S tmpmysql-10014sockmysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 | 不需要重新在此库上重建

| fwphp_data002 |

Master1mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 |+--------------------------+-------+2 rows in set (000 sec)Master2mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 || auto_increment_offset | 2 |+--------------------------+-------+2 rows in set (000 sec)

mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

3

安装完后MySQL 在homefalconmysql目录已经安装完成了接下来我们新建配置文件夹

及配置文件

到此MYSQL 服务器的环境已经搭建完毕了准备工作就已经完成了

二MySQL服务器主从 Replication 配置

应用场景

① DB负载过大相应速度比较慢

② DB 系统 IO操作频繁

③ 读数据量比较大DB读写分离

④ 数据库冗余备份

⑤ 并发量较大连接数耗尽

分析说明

[falconwwwfwphpcn 121820 ~]$ cd srcmysql-5130[falconwwwfwphpcn 121837 ~srcmysql-5130]$configure --prefix=homefalconmysql --enable-static --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-tcp-port=10000 --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --with-big-tables --with-plugins=max蓝色部分为主要需要配置的地方

[falconwwwfwphpcn 123017 ~srcmysql-5130]$ make ampamp make install

[falconwwwfwphpcn 135917 ~srcmysql-5130]$ ls ~mysqlbin docs include lib libexec mysql-test share sql-bench

[falconwwwfwphpcn 135920 ~mysql]$cd ~mysql[falconwwwfwphpcn 135924 ~mysql]$mkdir etc 新建数据配置文件目录

[falconwwwfwphpcn 135940 ~mysql]$cp sharemysqlmy-smallcnf etc

4

对于大并发量或者读写非常频繁的站点单台的数据库肯定会带来很多不确定的因

素为了最大可能的保存数据库的安全可靠性我们可以采取主从 Replication实现数

据的读写分离缓解单台 DB的压力

实例配置

主要配置说明(所有的配置都是在单台 Sever 下完成用端口来区分不同的 MySQL实例)这里我们才有一主两从的 Replication (注以下配置都没有做优化优化在MYSQL优化部分讲解)

主 DB19216823414010010 etc10010cnf从 DB119216823414010011 etc10011cnf

5

从 DB219216823414010012 etc10012cnf 配置流程

步骤一主的配置 10010cnf

[falconwwwfwphpcn 15474 0 ~mysqletc]$mkdir ~data10010[falconwwwfwphpcn 15474 1 ~mysqletc]$mkdir ~logs10010[falconwwwfwphpcn 154742 ~mysqletc]$ cp my-smallcnf 10010cnf[falconwwwfwphpcn 154751 ~mysqletc]$ vi 10010cnf[client]password = your_passwordport = 10010socket = tmpmysql-10010sock

TheMySQL server[mysqld]port = 10010socket = tmpmysql-10010sockskip-lockingdatadir = homefalcondata10010 数据目录地址

key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64Kskip-networkingserver-id = 10010

需要同步 binlog 的库

binlog-do-db=fwphp_data001 需要复制的两数据库

binlog-do-db=fwphp_data002

Uncomment the following if you want to log updateslog-bin=homefalconlogs10010mysql-bin binlog 日志路径

relay-log=homefalconlogs10010www-relay-bin 中继日志路径

binary logging format - mixed recommendedbinlog_format=mixed 二进制日志的格式 STATEMENTROWMIXEDdefault-storage-engine = innodb 默认为 innodb引擎

Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10010 InnoDB数据目录

innodb_data_file_path = ibdata110Mautoextend

6

步骤二初始化主 DB的数据库目录

步骤三启动主数据库

[falconwwwfwphpcn 155225 ~mysqletc]$ cd [falconwwwfwphpcn 155226 ~mysql]$ binmysql_install_db --datadir=~data10010

[falconwwwfwphpcn 155720 ~mysql]$ binmysqld_safe --defaults-file=etc10010cnf amp[falconwwwfwphpcn 155720 ~mysql]$ binmysql -uroot -p -S tmpmysql-10010sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 6Server version 5130-log Source distributionType help or h for help Type c to clear the buffer

mysqlgt

innodb_log_group_home_dir = homefalcondata10010 二进制日志目录

innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but beware of setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehash[isamchk]key_buffer = 8Msort_buffer_size = 8M[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

7

步骤四slave10011 的配置10011cnf

mysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TOuser001 IDENTIFIED BY user001 新建用于复制的帐号

mysqlgt flush privileges 刷新权限

mysqlgt create database fwphp_data001 创建数据库 fwphp_data001mysqlgt create database fwphp_data002 创建数据库 fwphp_data002

[falconwwwfwphpcn 155420 ~mysql]$ cp etcmy-smallcnf etc10011cnf[falconwwwfwphpcn 155420 ~mysql]$ vi etc10011cnf[client]port = 10011socket = tmpmysql-10011sock[mysqld]port = 10011socket = tmpmysql-10011sock

skip-lockingdatadir = homefalcondata10011 数据目录

key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

skip-networkingserver-id = 10011master-host=192168234140 主服务器 IPmaster-user=user001 复制帐号

master-password=user001 复制帐号的密码

master-port=10010 主服务器端口

master-connect-retry=5 连接到主服务器的间隔时间

replicate-do-db=fwphp_data001 需要复制的数据库名

replicate-do-db=fwphp_data002 需要复制的数据库名

Uncomment the following if you want to log updateslog-bin=homefalconlogs10011mysql-bin binlog 日志的存放路径

relay-log=homefalconlogs10011www-relay-bin 中继日志的存放路径

8

步骤五新建 slave10011的数据库文件及目录

在主数据库上对所有表进行读锁定

mysqlgt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 160436 ~data]$ cp -R 10010 10011 复制主服务器的数据文

件到从库

[falconwwwfwphpcn 160436 ~data]$ cd 10011[falconwwwfwphpcn 160532 ~data10011]$ rm wwwfwphpcn 删除 err和pid文件

binary logging format - mixed recommendedbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10011 InnoDB数据存放路径

innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10011 InnoDB日志存放路径

innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but beware of setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehashsafe-updates[isamchk]key_buffer = 8Msort_buffer_size = 8M[myisamchk]key_buffer = 8Msort_buffer_size = 8M[mysqlhotcopy]interactive-timeout

9

步骤六重复步骤四步骤五来新建 slave10012

到此主从数据库德配置文件及数据库文件新建完毕让我来启动从数据库吧

最后我们来测试主从 Replication 是否成功运行

Master上

mysqlgt show master status+------------------+----------+-----------------------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+-----------------------------+------------------+| mysql-bin000001 | 478 | fwphp_data001fwphp_data002 | |+------------------+----------+-----------------------------+------------------+1 row in set (001 sec)mysqlgt show processlist+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+| 4 | user001 | 19216823414044119 | NULL | Binlog Dump | 13847 | Has sent all binlogto slave waiting for binlog to be updated | NULL || 5 | user001 | 19216823414058946 | NULL | Binlog Dump | 13439 | Has sent all binlogto slave waiting for binlog to be updated | NULL || 6 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+3 rows in set (000 sec)

mysqlgt

[falconwwwfwphpcn 161035 ~mysql]$ binmysql -uroot -p -S tmpmysql-10011sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 4Server version 5130-log Source distribution

Type help or h for help Type c to clear the buffer

[falconwwwfwphpcn 160716 ~mysql]$ binmysqld_safe --defaults-file=etc10011cnf amp

[falconwwwfwphpcn 160740 ~mysql]$ binmysqld_safe --defaults-file=etc10011cnf amp

查看端口是否启动

[falconwwwfwphpcn 160752 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010010 0000 LISTENtcp 0 0 000010011 0000 LISTENtcp 0 0 000010012 0000 LISTEN

[falconwwwfwphpcn 160532 ~data10011]$ rm -rf ib_logfile 删除从主服务器数据

目录中的带过来的一些日志和错误日志等信息

10

同理在 slave 启动正常的情况下slave10012 会和 slave10011的状态一样

注如果有以下几种情况则说明 slave 没有能正常同步到master的数据如

1show slave status中 Slave_IO_State 的状态位空

2Slave_IO_Running NO3Slave_SQL_Running No4Last_IO_Error error connecting to master user00119216823414010001 - retry-time 1retries 86400这些情况下都表示主从同步失败那么怎么解决这些问题呢

在主上运行 show master status记录下 File 和 Position登录到从服务器上

Slave 10011上

mysqlgt show slave statusG 1 row

Slave_IO_State Waiting for master to send eventMaster_Host 192168234140Master_User user001Master_Port 10010

Connect_Retry 5Master_Log_File mysql-bin000001

Read_Master_Log_Pos 478Relay_Log_File www-relay-bin000003Relay_Log_Pos 251

Relay_Master_Log_File mysql-bin000001Slave_IO_Running YesSlave_SQL_Running YesReplicate_Do_DB fwphp_data001fwphp_data002

mysqlgt show processlist+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| 1 | system user | | NULL | Connect | 251480 | Waiting for master to send event| NULL || 2 | system user | | NULL | Connect | 251040 | Has read all relay log waitingfor the slave IO thread to update it | NULL || 4 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+3 rows in set (000 sec)

11

利用 change master to 修改从上同步主的 binlog 日志文件和同步点

常见方法是在从服务器上

这样在启动从后show slave status 就可以看到

Slave_IO_State Waiting for master to send eventSlave_IO_Running YesSlave_SQL_Running Yes以上出现 slave 不能同步主的数据主要可以通过这些方法来解决

下面来测试主从数据同步

Master上

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (001 sec)mysqlgt use fwphp_data001Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt stop slaveQuery OK 0 rows affected (001 sec)mysqlgt change master to

-gt master_host=192168234140 主服务器的 IP-gt master_user=user001 复制专业帐号

-gt master_password=user001 复制专用帐号的密码

-gt master_port=10010 主服务器端口

-gt master_log_file=mysql-bin000001 主服务器的当前 binlog 日志名

-gt master_log_pos=478 binlog 日志的还原点

-gt master_connect_retry=5 连接到主服务器同步的时间间隔

mysqlgt start slaveQuery OK 0 rows affected (001 sec)

12

在从库上查看是否数据同步成功

经过以上这些测试说明MySQL的主从配置成功在这个过程中或许会出现各种各样的错

误信息不要担心只要你把握住出现错误首先看错误日志然后把出现错误的主要信息放

到网上搜索一下会有很多解决方法呈现在你的面前最好不要忘了将出现错误的症状错

mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))ERROR 1223 (HY000) Cant execute the query because you have a conflicting read lockmysqlgt 出现以上错误主要是在上面步骤五时对主库的表进行了读锁定

mysqlgt unlock tablesQuery OK 0 rows affected (000 sec)mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))Query OK 0 rows affected (001 sec)mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (000 sec)

Slave10011 和 slave10012 上

mysqlgt use fwphp_data001Database changedmysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (001 sec)

mysqlgt desc tb001+----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+----------------+| uid | int(11) | NO | PRI | NULL | auto_increment || username | varchar(20) | NO | | NULL | |+----------+-------------+------+-----+---------+----------------+2 rows in set (001 sec)

13

误代码及解决方法发到 linuxtoneorg让更多的初学者避免出现类似的错误而无法进行以下

的学习

三MySQL 主主 Replication 解析

应用场景

① 双机冗余

② 写压力比较大

③ 数据高可用性安全性较强的场合

④ 单点故障

分析说明

对于写数据量大非常大的场合单台DB已经无法满足应用的需要这时可以

横向扩展 DB应用 2 台DB做主主的 Replication减小数据的写压力同时双主

数据保证了数据的完整性和安全性避免了单点故障

实例配置

配置说明

14

主主测试主要在一台服务器上测试所以我开起了 2 实例的方式来模拟主主数据库的复

制通过以上图片可以看出主要配置

Master119216823414010013 配置文件homefalconmysqletc10013cnfMaster219216823414010014 配置文件homefalconmysqletc10014cnf

配置过程

步骤一新建 master1master2的数据目录及配置文件

步骤二设置 master1的配置文件 10013cnf

[falconwwwfwphpcn 210614 ~mysql]$ vi etc10013cnf[client]password = your_passwordport = 10013socket = tmpmysql-10013sock

[mysqld]port = 10013socket = tmpmysql-10013sockskip-lockingdatadir = homefalcondata10013key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

server-id = 10013另一主的连接信息

master-host=192168234140master-user=user001master-password=user001

[falconwwwfwphpcn 210133 ~mysql]$ cp etcmy-smallcnf etc10013cnf[falconwwwfwphpcn 210144 ~mysql]$ cd [falconwwwfwphpcn 210223 ~]$ mkdir data10013[falconwwwfwphpcn 210223 ~]$ mkdir logs 10013 logs 10014[falconwwwfwphpcn 210317 ~]$cd mysql[falconwwwfwphpcn 210317 ~mysql]$ binmysql_install_db --datadir=homefalcondata10013 初始化 10013数据目录

15

master-port=10014master-connect-retry=1需要同步 binlog 的库

binlog-do-db=fwphp_data001binlog-do-db=fwphp_data002

解决双主主键冲突问题一个主用 auto_increment_increment=1auto_increment_offset=1的话另一个

应该是 auto_increment_increment=2auto_increment_offset=1auto_increment_increment 为步长

auto_increment_offset 从多少开始

auto_increment_increment=1 解决主键冲突master2上应该都设为 2auto_increment_offset=1

解决双主之间各有从时从不能更新另一个主插入的新数据

从服务器从主服务器那更新 binlog 日志到中继日志时同时也更新也更新自己的

binlog 日志

log-slave-updates

log-bin=homefalconlogs10013mysql-binrelay-log=homefalconlogs10013www-relay-binbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10013innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10013innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but bewareof setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M

16

步骤三初始化 master1

[mysql]no-auto-rehash

[isamchk]key_buffer = 8Msort_buffer_size = 8M

[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

[falconwwwfwphpcn 211543 ~mysql]$ binmysqld_safe --defaults-file=etc10013cnf amp[falconwwwfwphpcn 211550 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010013 0000 LISTEN[falconwwwfwphpcn 211552 ~mysql]$ binmysql -uroot -p -S tmpmysql-10013sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130-log Source distributionType help or h for help Type c to clear the buffermysqlgtmysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TO

-gt user001IDENTIFIED BY user001 新建复制帐号

Query OK 0 rows affected (000 sec)mysqlgt flush privileges 权限刷新使其立即生效

Query OK 0 rows affected (000 sec)mysqlgt create database fwphp_data001Query OK 1 row affected (000 sec)mysqlgt create database fwphp_data002Query OK 1 row affected (000 sec)

17

步骤四同步骤二设置 master2的 10014cnf文件(注意端口及目录名为 10014)

步骤五新建及初始化 master2数据文件

在master1下设置只读模式锁定表的写入保持主从之间的数据一致性

Mysql gt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 212002 ~]$ cp -R data10013 data10014[falconwwwfwphpcn 212006 ~]$ ls data10014fwphp_data001 fwphp_data002 ibdata1 ib_logfile0 ib_logfile1 masterinfo mysqlrelay-loginfo test wwwfwphpcnerr wwwfwphpcnpid[falconwwwfwphpcn 212008 ~]$ rm data10014ib_logfile

[falconwwwfwphpcn 211347 ~mysql]$ cp etc10013cnf etc10014cnf[falconwwwfwphpcn 211347 ~mysql]$ vi etc10014cnfserver-id = 10014另一主的连接信息

master-host=192168234140master-user=user001master-password=user001master-port=10013 此处为另一个主的端口

master-connect-retry=1 更主那更新 binlog 的时间间隔为 1 秒

auto_increment_increment=2 解决 2主在同时插入数据时的主键冲突问题

auto_increment_offset=2log-slave-updates

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (000 sec)

18

到此主主之间的复制就已经准备好了下面我们来测试一下主主之间数据的复制吧

在测试之前确保master1和master2 的 auto_increment_incrementauto_increment_offset值不能一样否则就会有主键冲突问题存在

测试开始

1先往 master1的 fwphp_data001中新建一个表

create table tb002(uid int not null auto_incrementuser varchar(20) not nullprimary key(uid))2在 master2上查看是否同步了 tb002表

[falconwwwfwphpcn 212012 ~]$ rm data10014wwwfwphpcn 删除 pid 和 err文件

[falconwwwfwphpcn 212441 ~]$ rm data10014info 删除中继日志文件

[falconwwwfwphpcn 212405 ~mysql]$ binmysql -uroot -p -S tmpmysql-10014sockmysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 | 不需要重新在此库上重建

| fwphp_data002 |

Master1mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 |+--------------------------+-------+2 rows in set (000 sec)Master2mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 || auto_increment_offset | 2 |+--------------------------+-------+2 rows in set (000 sec)

mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

4

对于大并发量或者读写非常频繁的站点单台的数据库肯定会带来很多不确定的因

素为了最大可能的保存数据库的安全可靠性我们可以采取主从 Replication实现数

据的读写分离缓解单台 DB的压力

实例配置

主要配置说明(所有的配置都是在单台 Sever 下完成用端口来区分不同的 MySQL实例)这里我们才有一主两从的 Replication (注以下配置都没有做优化优化在MYSQL优化部分讲解)

主 DB19216823414010010 etc10010cnf从 DB119216823414010011 etc10011cnf

5

从 DB219216823414010012 etc10012cnf 配置流程

步骤一主的配置 10010cnf

[falconwwwfwphpcn 15474 0 ~mysqletc]$mkdir ~data10010[falconwwwfwphpcn 15474 1 ~mysqletc]$mkdir ~logs10010[falconwwwfwphpcn 154742 ~mysqletc]$ cp my-smallcnf 10010cnf[falconwwwfwphpcn 154751 ~mysqletc]$ vi 10010cnf[client]password = your_passwordport = 10010socket = tmpmysql-10010sock

TheMySQL server[mysqld]port = 10010socket = tmpmysql-10010sockskip-lockingdatadir = homefalcondata10010 数据目录地址

key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64Kskip-networkingserver-id = 10010

需要同步 binlog 的库

binlog-do-db=fwphp_data001 需要复制的两数据库

binlog-do-db=fwphp_data002

Uncomment the following if you want to log updateslog-bin=homefalconlogs10010mysql-bin binlog 日志路径

relay-log=homefalconlogs10010www-relay-bin 中继日志路径

binary logging format - mixed recommendedbinlog_format=mixed 二进制日志的格式 STATEMENTROWMIXEDdefault-storage-engine = innodb 默认为 innodb引擎

Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10010 InnoDB数据目录

innodb_data_file_path = ibdata110Mautoextend

6

步骤二初始化主 DB的数据库目录

步骤三启动主数据库

[falconwwwfwphpcn 155225 ~mysqletc]$ cd [falconwwwfwphpcn 155226 ~mysql]$ binmysql_install_db --datadir=~data10010

[falconwwwfwphpcn 155720 ~mysql]$ binmysqld_safe --defaults-file=etc10010cnf amp[falconwwwfwphpcn 155720 ~mysql]$ binmysql -uroot -p -S tmpmysql-10010sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 6Server version 5130-log Source distributionType help or h for help Type c to clear the buffer

mysqlgt

innodb_log_group_home_dir = homefalcondata10010 二进制日志目录

innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but beware of setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehash[isamchk]key_buffer = 8Msort_buffer_size = 8M[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

7

步骤四slave10011 的配置10011cnf

mysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TOuser001 IDENTIFIED BY user001 新建用于复制的帐号

mysqlgt flush privileges 刷新权限

mysqlgt create database fwphp_data001 创建数据库 fwphp_data001mysqlgt create database fwphp_data002 创建数据库 fwphp_data002

[falconwwwfwphpcn 155420 ~mysql]$ cp etcmy-smallcnf etc10011cnf[falconwwwfwphpcn 155420 ~mysql]$ vi etc10011cnf[client]port = 10011socket = tmpmysql-10011sock[mysqld]port = 10011socket = tmpmysql-10011sock

skip-lockingdatadir = homefalcondata10011 数据目录

key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

skip-networkingserver-id = 10011master-host=192168234140 主服务器 IPmaster-user=user001 复制帐号

master-password=user001 复制帐号的密码

master-port=10010 主服务器端口

master-connect-retry=5 连接到主服务器的间隔时间

replicate-do-db=fwphp_data001 需要复制的数据库名

replicate-do-db=fwphp_data002 需要复制的数据库名

Uncomment the following if you want to log updateslog-bin=homefalconlogs10011mysql-bin binlog 日志的存放路径

relay-log=homefalconlogs10011www-relay-bin 中继日志的存放路径

8

步骤五新建 slave10011的数据库文件及目录

在主数据库上对所有表进行读锁定

mysqlgt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 160436 ~data]$ cp -R 10010 10011 复制主服务器的数据文

件到从库

[falconwwwfwphpcn 160436 ~data]$ cd 10011[falconwwwfwphpcn 160532 ~data10011]$ rm wwwfwphpcn 删除 err和pid文件

binary logging format - mixed recommendedbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10011 InnoDB数据存放路径

innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10011 InnoDB日志存放路径

innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but beware of setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehashsafe-updates[isamchk]key_buffer = 8Msort_buffer_size = 8M[myisamchk]key_buffer = 8Msort_buffer_size = 8M[mysqlhotcopy]interactive-timeout

9

步骤六重复步骤四步骤五来新建 slave10012

到此主从数据库德配置文件及数据库文件新建完毕让我来启动从数据库吧

最后我们来测试主从 Replication 是否成功运行

Master上

mysqlgt show master status+------------------+----------+-----------------------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+-----------------------------+------------------+| mysql-bin000001 | 478 | fwphp_data001fwphp_data002 | |+------------------+----------+-----------------------------+------------------+1 row in set (001 sec)mysqlgt show processlist+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+| 4 | user001 | 19216823414044119 | NULL | Binlog Dump | 13847 | Has sent all binlogto slave waiting for binlog to be updated | NULL || 5 | user001 | 19216823414058946 | NULL | Binlog Dump | 13439 | Has sent all binlogto slave waiting for binlog to be updated | NULL || 6 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+3 rows in set (000 sec)

mysqlgt

[falconwwwfwphpcn 161035 ~mysql]$ binmysql -uroot -p -S tmpmysql-10011sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 4Server version 5130-log Source distribution

Type help or h for help Type c to clear the buffer

[falconwwwfwphpcn 160716 ~mysql]$ binmysqld_safe --defaults-file=etc10011cnf amp

[falconwwwfwphpcn 160740 ~mysql]$ binmysqld_safe --defaults-file=etc10011cnf amp

查看端口是否启动

[falconwwwfwphpcn 160752 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010010 0000 LISTENtcp 0 0 000010011 0000 LISTENtcp 0 0 000010012 0000 LISTEN

[falconwwwfwphpcn 160532 ~data10011]$ rm -rf ib_logfile 删除从主服务器数据

目录中的带过来的一些日志和错误日志等信息

10

同理在 slave 启动正常的情况下slave10012 会和 slave10011的状态一样

注如果有以下几种情况则说明 slave 没有能正常同步到master的数据如

1show slave status中 Slave_IO_State 的状态位空

2Slave_IO_Running NO3Slave_SQL_Running No4Last_IO_Error error connecting to master user00119216823414010001 - retry-time 1retries 86400这些情况下都表示主从同步失败那么怎么解决这些问题呢

在主上运行 show master status记录下 File 和 Position登录到从服务器上

Slave 10011上

mysqlgt show slave statusG 1 row

Slave_IO_State Waiting for master to send eventMaster_Host 192168234140Master_User user001Master_Port 10010

Connect_Retry 5Master_Log_File mysql-bin000001

Read_Master_Log_Pos 478Relay_Log_File www-relay-bin000003Relay_Log_Pos 251

Relay_Master_Log_File mysql-bin000001Slave_IO_Running YesSlave_SQL_Running YesReplicate_Do_DB fwphp_data001fwphp_data002

mysqlgt show processlist+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| 1 | system user | | NULL | Connect | 251480 | Waiting for master to send event| NULL || 2 | system user | | NULL | Connect | 251040 | Has read all relay log waitingfor the slave IO thread to update it | NULL || 4 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+3 rows in set (000 sec)

11

利用 change master to 修改从上同步主的 binlog 日志文件和同步点

常见方法是在从服务器上

这样在启动从后show slave status 就可以看到

Slave_IO_State Waiting for master to send eventSlave_IO_Running YesSlave_SQL_Running Yes以上出现 slave 不能同步主的数据主要可以通过这些方法来解决

下面来测试主从数据同步

Master上

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (001 sec)mysqlgt use fwphp_data001Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt stop slaveQuery OK 0 rows affected (001 sec)mysqlgt change master to

-gt master_host=192168234140 主服务器的 IP-gt master_user=user001 复制专业帐号

-gt master_password=user001 复制专用帐号的密码

-gt master_port=10010 主服务器端口

-gt master_log_file=mysql-bin000001 主服务器的当前 binlog 日志名

-gt master_log_pos=478 binlog 日志的还原点

-gt master_connect_retry=5 连接到主服务器同步的时间间隔

mysqlgt start slaveQuery OK 0 rows affected (001 sec)

12

在从库上查看是否数据同步成功

经过以上这些测试说明MySQL的主从配置成功在这个过程中或许会出现各种各样的错

误信息不要担心只要你把握住出现错误首先看错误日志然后把出现错误的主要信息放

到网上搜索一下会有很多解决方法呈现在你的面前最好不要忘了将出现错误的症状错

mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))ERROR 1223 (HY000) Cant execute the query because you have a conflicting read lockmysqlgt 出现以上错误主要是在上面步骤五时对主库的表进行了读锁定

mysqlgt unlock tablesQuery OK 0 rows affected (000 sec)mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))Query OK 0 rows affected (001 sec)mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (000 sec)

Slave10011 和 slave10012 上

mysqlgt use fwphp_data001Database changedmysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (001 sec)

mysqlgt desc tb001+----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+----------------+| uid | int(11) | NO | PRI | NULL | auto_increment || username | varchar(20) | NO | | NULL | |+----------+-------------+------+-----+---------+----------------+2 rows in set (001 sec)

13

误代码及解决方法发到 linuxtoneorg让更多的初学者避免出现类似的错误而无法进行以下

的学习

三MySQL 主主 Replication 解析

应用场景

① 双机冗余

② 写压力比较大

③ 数据高可用性安全性较强的场合

④ 单点故障

分析说明

对于写数据量大非常大的场合单台DB已经无法满足应用的需要这时可以

横向扩展 DB应用 2 台DB做主主的 Replication减小数据的写压力同时双主

数据保证了数据的完整性和安全性避免了单点故障

实例配置

配置说明

14

主主测试主要在一台服务器上测试所以我开起了 2 实例的方式来模拟主主数据库的复

制通过以上图片可以看出主要配置

Master119216823414010013 配置文件homefalconmysqletc10013cnfMaster219216823414010014 配置文件homefalconmysqletc10014cnf

配置过程

步骤一新建 master1master2的数据目录及配置文件

步骤二设置 master1的配置文件 10013cnf

[falconwwwfwphpcn 210614 ~mysql]$ vi etc10013cnf[client]password = your_passwordport = 10013socket = tmpmysql-10013sock

[mysqld]port = 10013socket = tmpmysql-10013sockskip-lockingdatadir = homefalcondata10013key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

server-id = 10013另一主的连接信息

master-host=192168234140master-user=user001master-password=user001

[falconwwwfwphpcn 210133 ~mysql]$ cp etcmy-smallcnf etc10013cnf[falconwwwfwphpcn 210144 ~mysql]$ cd [falconwwwfwphpcn 210223 ~]$ mkdir data10013[falconwwwfwphpcn 210223 ~]$ mkdir logs 10013 logs 10014[falconwwwfwphpcn 210317 ~]$cd mysql[falconwwwfwphpcn 210317 ~mysql]$ binmysql_install_db --datadir=homefalcondata10013 初始化 10013数据目录

15

master-port=10014master-connect-retry=1需要同步 binlog 的库

binlog-do-db=fwphp_data001binlog-do-db=fwphp_data002

解决双主主键冲突问题一个主用 auto_increment_increment=1auto_increment_offset=1的话另一个

应该是 auto_increment_increment=2auto_increment_offset=1auto_increment_increment 为步长

auto_increment_offset 从多少开始

auto_increment_increment=1 解决主键冲突master2上应该都设为 2auto_increment_offset=1

解决双主之间各有从时从不能更新另一个主插入的新数据

从服务器从主服务器那更新 binlog 日志到中继日志时同时也更新也更新自己的

binlog 日志

log-slave-updates

log-bin=homefalconlogs10013mysql-binrelay-log=homefalconlogs10013www-relay-binbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10013innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10013innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but bewareof setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M

16

步骤三初始化 master1

[mysql]no-auto-rehash

[isamchk]key_buffer = 8Msort_buffer_size = 8M

[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

[falconwwwfwphpcn 211543 ~mysql]$ binmysqld_safe --defaults-file=etc10013cnf amp[falconwwwfwphpcn 211550 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010013 0000 LISTEN[falconwwwfwphpcn 211552 ~mysql]$ binmysql -uroot -p -S tmpmysql-10013sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130-log Source distributionType help or h for help Type c to clear the buffermysqlgtmysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TO

-gt user001IDENTIFIED BY user001 新建复制帐号

Query OK 0 rows affected (000 sec)mysqlgt flush privileges 权限刷新使其立即生效

Query OK 0 rows affected (000 sec)mysqlgt create database fwphp_data001Query OK 1 row affected (000 sec)mysqlgt create database fwphp_data002Query OK 1 row affected (000 sec)

17

步骤四同步骤二设置 master2的 10014cnf文件(注意端口及目录名为 10014)

步骤五新建及初始化 master2数据文件

在master1下设置只读模式锁定表的写入保持主从之间的数据一致性

Mysql gt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 212002 ~]$ cp -R data10013 data10014[falconwwwfwphpcn 212006 ~]$ ls data10014fwphp_data001 fwphp_data002 ibdata1 ib_logfile0 ib_logfile1 masterinfo mysqlrelay-loginfo test wwwfwphpcnerr wwwfwphpcnpid[falconwwwfwphpcn 212008 ~]$ rm data10014ib_logfile

[falconwwwfwphpcn 211347 ~mysql]$ cp etc10013cnf etc10014cnf[falconwwwfwphpcn 211347 ~mysql]$ vi etc10014cnfserver-id = 10014另一主的连接信息

master-host=192168234140master-user=user001master-password=user001master-port=10013 此处为另一个主的端口

master-connect-retry=1 更主那更新 binlog 的时间间隔为 1 秒

auto_increment_increment=2 解决 2主在同时插入数据时的主键冲突问题

auto_increment_offset=2log-slave-updates

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (000 sec)

18

到此主主之间的复制就已经准备好了下面我们来测试一下主主之间数据的复制吧

在测试之前确保master1和master2 的 auto_increment_incrementauto_increment_offset值不能一样否则就会有主键冲突问题存在

测试开始

1先往 master1的 fwphp_data001中新建一个表

create table tb002(uid int not null auto_incrementuser varchar(20) not nullprimary key(uid))2在 master2上查看是否同步了 tb002表

[falconwwwfwphpcn 212012 ~]$ rm data10014wwwfwphpcn 删除 pid 和 err文件

[falconwwwfwphpcn 212441 ~]$ rm data10014info 删除中继日志文件

[falconwwwfwphpcn 212405 ~mysql]$ binmysql -uroot -p -S tmpmysql-10014sockmysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 | 不需要重新在此库上重建

| fwphp_data002 |

Master1mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 |+--------------------------+-------+2 rows in set (000 sec)Master2mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 || auto_increment_offset | 2 |+--------------------------+-------+2 rows in set (000 sec)

mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

5

从 DB219216823414010012 etc10012cnf 配置流程

步骤一主的配置 10010cnf

[falconwwwfwphpcn 15474 0 ~mysqletc]$mkdir ~data10010[falconwwwfwphpcn 15474 1 ~mysqletc]$mkdir ~logs10010[falconwwwfwphpcn 154742 ~mysqletc]$ cp my-smallcnf 10010cnf[falconwwwfwphpcn 154751 ~mysqletc]$ vi 10010cnf[client]password = your_passwordport = 10010socket = tmpmysql-10010sock

TheMySQL server[mysqld]port = 10010socket = tmpmysql-10010sockskip-lockingdatadir = homefalcondata10010 数据目录地址

key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64Kskip-networkingserver-id = 10010

需要同步 binlog 的库

binlog-do-db=fwphp_data001 需要复制的两数据库

binlog-do-db=fwphp_data002

Uncomment the following if you want to log updateslog-bin=homefalconlogs10010mysql-bin binlog 日志路径

relay-log=homefalconlogs10010www-relay-bin 中继日志路径

binary logging format - mixed recommendedbinlog_format=mixed 二进制日志的格式 STATEMENTROWMIXEDdefault-storage-engine = innodb 默认为 innodb引擎

Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10010 InnoDB数据目录

innodb_data_file_path = ibdata110Mautoextend

6

步骤二初始化主 DB的数据库目录

步骤三启动主数据库

[falconwwwfwphpcn 155225 ~mysqletc]$ cd [falconwwwfwphpcn 155226 ~mysql]$ binmysql_install_db --datadir=~data10010

[falconwwwfwphpcn 155720 ~mysql]$ binmysqld_safe --defaults-file=etc10010cnf amp[falconwwwfwphpcn 155720 ~mysql]$ binmysql -uroot -p -S tmpmysql-10010sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 6Server version 5130-log Source distributionType help or h for help Type c to clear the buffer

mysqlgt

innodb_log_group_home_dir = homefalcondata10010 二进制日志目录

innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but beware of setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehash[isamchk]key_buffer = 8Msort_buffer_size = 8M[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

7

步骤四slave10011 的配置10011cnf

mysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TOuser001 IDENTIFIED BY user001 新建用于复制的帐号

mysqlgt flush privileges 刷新权限

mysqlgt create database fwphp_data001 创建数据库 fwphp_data001mysqlgt create database fwphp_data002 创建数据库 fwphp_data002

[falconwwwfwphpcn 155420 ~mysql]$ cp etcmy-smallcnf etc10011cnf[falconwwwfwphpcn 155420 ~mysql]$ vi etc10011cnf[client]port = 10011socket = tmpmysql-10011sock[mysqld]port = 10011socket = tmpmysql-10011sock

skip-lockingdatadir = homefalcondata10011 数据目录

key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

skip-networkingserver-id = 10011master-host=192168234140 主服务器 IPmaster-user=user001 复制帐号

master-password=user001 复制帐号的密码

master-port=10010 主服务器端口

master-connect-retry=5 连接到主服务器的间隔时间

replicate-do-db=fwphp_data001 需要复制的数据库名

replicate-do-db=fwphp_data002 需要复制的数据库名

Uncomment the following if you want to log updateslog-bin=homefalconlogs10011mysql-bin binlog 日志的存放路径

relay-log=homefalconlogs10011www-relay-bin 中继日志的存放路径

8

步骤五新建 slave10011的数据库文件及目录

在主数据库上对所有表进行读锁定

mysqlgt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 160436 ~data]$ cp -R 10010 10011 复制主服务器的数据文

件到从库

[falconwwwfwphpcn 160436 ~data]$ cd 10011[falconwwwfwphpcn 160532 ~data10011]$ rm wwwfwphpcn 删除 err和pid文件

binary logging format - mixed recommendedbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10011 InnoDB数据存放路径

innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10011 InnoDB日志存放路径

innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but beware of setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehashsafe-updates[isamchk]key_buffer = 8Msort_buffer_size = 8M[myisamchk]key_buffer = 8Msort_buffer_size = 8M[mysqlhotcopy]interactive-timeout

9

步骤六重复步骤四步骤五来新建 slave10012

到此主从数据库德配置文件及数据库文件新建完毕让我来启动从数据库吧

最后我们来测试主从 Replication 是否成功运行

Master上

mysqlgt show master status+------------------+----------+-----------------------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+-----------------------------+------------------+| mysql-bin000001 | 478 | fwphp_data001fwphp_data002 | |+------------------+----------+-----------------------------+------------------+1 row in set (001 sec)mysqlgt show processlist+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+| 4 | user001 | 19216823414044119 | NULL | Binlog Dump | 13847 | Has sent all binlogto slave waiting for binlog to be updated | NULL || 5 | user001 | 19216823414058946 | NULL | Binlog Dump | 13439 | Has sent all binlogto slave waiting for binlog to be updated | NULL || 6 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+3 rows in set (000 sec)

mysqlgt

[falconwwwfwphpcn 161035 ~mysql]$ binmysql -uroot -p -S tmpmysql-10011sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 4Server version 5130-log Source distribution

Type help or h for help Type c to clear the buffer

[falconwwwfwphpcn 160716 ~mysql]$ binmysqld_safe --defaults-file=etc10011cnf amp

[falconwwwfwphpcn 160740 ~mysql]$ binmysqld_safe --defaults-file=etc10011cnf amp

查看端口是否启动

[falconwwwfwphpcn 160752 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010010 0000 LISTENtcp 0 0 000010011 0000 LISTENtcp 0 0 000010012 0000 LISTEN

[falconwwwfwphpcn 160532 ~data10011]$ rm -rf ib_logfile 删除从主服务器数据

目录中的带过来的一些日志和错误日志等信息

10

同理在 slave 启动正常的情况下slave10012 会和 slave10011的状态一样

注如果有以下几种情况则说明 slave 没有能正常同步到master的数据如

1show slave status中 Slave_IO_State 的状态位空

2Slave_IO_Running NO3Slave_SQL_Running No4Last_IO_Error error connecting to master user00119216823414010001 - retry-time 1retries 86400这些情况下都表示主从同步失败那么怎么解决这些问题呢

在主上运行 show master status记录下 File 和 Position登录到从服务器上

Slave 10011上

mysqlgt show slave statusG 1 row

Slave_IO_State Waiting for master to send eventMaster_Host 192168234140Master_User user001Master_Port 10010

Connect_Retry 5Master_Log_File mysql-bin000001

Read_Master_Log_Pos 478Relay_Log_File www-relay-bin000003Relay_Log_Pos 251

Relay_Master_Log_File mysql-bin000001Slave_IO_Running YesSlave_SQL_Running YesReplicate_Do_DB fwphp_data001fwphp_data002

mysqlgt show processlist+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| 1 | system user | | NULL | Connect | 251480 | Waiting for master to send event| NULL || 2 | system user | | NULL | Connect | 251040 | Has read all relay log waitingfor the slave IO thread to update it | NULL || 4 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+3 rows in set (000 sec)

11

利用 change master to 修改从上同步主的 binlog 日志文件和同步点

常见方法是在从服务器上

这样在启动从后show slave status 就可以看到

Slave_IO_State Waiting for master to send eventSlave_IO_Running YesSlave_SQL_Running Yes以上出现 slave 不能同步主的数据主要可以通过这些方法来解决

下面来测试主从数据同步

Master上

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (001 sec)mysqlgt use fwphp_data001Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt stop slaveQuery OK 0 rows affected (001 sec)mysqlgt change master to

-gt master_host=192168234140 主服务器的 IP-gt master_user=user001 复制专业帐号

-gt master_password=user001 复制专用帐号的密码

-gt master_port=10010 主服务器端口

-gt master_log_file=mysql-bin000001 主服务器的当前 binlog 日志名

-gt master_log_pos=478 binlog 日志的还原点

-gt master_connect_retry=5 连接到主服务器同步的时间间隔

mysqlgt start slaveQuery OK 0 rows affected (001 sec)

12

在从库上查看是否数据同步成功

经过以上这些测试说明MySQL的主从配置成功在这个过程中或许会出现各种各样的错

误信息不要担心只要你把握住出现错误首先看错误日志然后把出现错误的主要信息放

到网上搜索一下会有很多解决方法呈现在你的面前最好不要忘了将出现错误的症状错

mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))ERROR 1223 (HY000) Cant execute the query because you have a conflicting read lockmysqlgt 出现以上错误主要是在上面步骤五时对主库的表进行了读锁定

mysqlgt unlock tablesQuery OK 0 rows affected (000 sec)mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))Query OK 0 rows affected (001 sec)mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (000 sec)

Slave10011 和 slave10012 上

mysqlgt use fwphp_data001Database changedmysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (001 sec)

mysqlgt desc tb001+----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+----------------+| uid | int(11) | NO | PRI | NULL | auto_increment || username | varchar(20) | NO | | NULL | |+----------+-------------+------+-----+---------+----------------+2 rows in set (001 sec)

13

误代码及解决方法发到 linuxtoneorg让更多的初学者避免出现类似的错误而无法进行以下

的学习

三MySQL 主主 Replication 解析

应用场景

① 双机冗余

② 写压力比较大

③ 数据高可用性安全性较强的场合

④ 单点故障

分析说明

对于写数据量大非常大的场合单台DB已经无法满足应用的需要这时可以

横向扩展 DB应用 2 台DB做主主的 Replication减小数据的写压力同时双主

数据保证了数据的完整性和安全性避免了单点故障

实例配置

配置说明

14

主主测试主要在一台服务器上测试所以我开起了 2 实例的方式来模拟主主数据库的复

制通过以上图片可以看出主要配置

Master119216823414010013 配置文件homefalconmysqletc10013cnfMaster219216823414010014 配置文件homefalconmysqletc10014cnf

配置过程

步骤一新建 master1master2的数据目录及配置文件

步骤二设置 master1的配置文件 10013cnf

[falconwwwfwphpcn 210614 ~mysql]$ vi etc10013cnf[client]password = your_passwordport = 10013socket = tmpmysql-10013sock

[mysqld]port = 10013socket = tmpmysql-10013sockskip-lockingdatadir = homefalcondata10013key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

server-id = 10013另一主的连接信息

master-host=192168234140master-user=user001master-password=user001

[falconwwwfwphpcn 210133 ~mysql]$ cp etcmy-smallcnf etc10013cnf[falconwwwfwphpcn 210144 ~mysql]$ cd [falconwwwfwphpcn 210223 ~]$ mkdir data10013[falconwwwfwphpcn 210223 ~]$ mkdir logs 10013 logs 10014[falconwwwfwphpcn 210317 ~]$cd mysql[falconwwwfwphpcn 210317 ~mysql]$ binmysql_install_db --datadir=homefalcondata10013 初始化 10013数据目录

15

master-port=10014master-connect-retry=1需要同步 binlog 的库

binlog-do-db=fwphp_data001binlog-do-db=fwphp_data002

解决双主主键冲突问题一个主用 auto_increment_increment=1auto_increment_offset=1的话另一个

应该是 auto_increment_increment=2auto_increment_offset=1auto_increment_increment 为步长

auto_increment_offset 从多少开始

auto_increment_increment=1 解决主键冲突master2上应该都设为 2auto_increment_offset=1

解决双主之间各有从时从不能更新另一个主插入的新数据

从服务器从主服务器那更新 binlog 日志到中继日志时同时也更新也更新自己的

binlog 日志

log-slave-updates

log-bin=homefalconlogs10013mysql-binrelay-log=homefalconlogs10013www-relay-binbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10013innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10013innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but bewareof setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M

16

步骤三初始化 master1

[mysql]no-auto-rehash

[isamchk]key_buffer = 8Msort_buffer_size = 8M

[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

[falconwwwfwphpcn 211543 ~mysql]$ binmysqld_safe --defaults-file=etc10013cnf amp[falconwwwfwphpcn 211550 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010013 0000 LISTEN[falconwwwfwphpcn 211552 ~mysql]$ binmysql -uroot -p -S tmpmysql-10013sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130-log Source distributionType help or h for help Type c to clear the buffermysqlgtmysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TO

-gt user001IDENTIFIED BY user001 新建复制帐号

Query OK 0 rows affected (000 sec)mysqlgt flush privileges 权限刷新使其立即生效

Query OK 0 rows affected (000 sec)mysqlgt create database fwphp_data001Query OK 1 row affected (000 sec)mysqlgt create database fwphp_data002Query OK 1 row affected (000 sec)

17

步骤四同步骤二设置 master2的 10014cnf文件(注意端口及目录名为 10014)

步骤五新建及初始化 master2数据文件

在master1下设置只读模式锁定表的写入保持主从之间的数据一致性

Mysql gt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 212002 ~]$ cp -R data10013 data10014[falconwwwfwphpcn 212006 ~]$ ls data10014fwphp_data001 fwphp_data002 ibdata1 ib_logfile0 ib_logfile1 masterinfo mysqlrelay-loginfo test wwwfwphpcnerr wwwfwphpcnpid[falconwwwfwphpcn 212008 ~]$ rm data10014ib_logfile

[falconwwwfwphpcn 211347 ~mysql]$ cp etc10013cnf etc10014cnf[falconwwwfwphpcn 211347 ~mysql]$ vi etc10014cnfserver-id = 10014另一主的连接信息

master-host=192168234140master-user=user001master-password=user001master-port=10013 此处为另一个主的端口

master-connect-retry=1 更主那更新 binlog 的时间间隔为 1 秒

auto_increment_increment=2 解决 2主在同时插入数据时的主键冲突问题

auto_increment_offset=2log-slave-updates

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (000 sec)

18

到此主主之间的复制就已经准备好了下面我们来测试一下主主之间数据的复制吧

在测试之前确保master1和master2 的 auto_increment_incrementauto_increment_offset值不能一样否则就会有主键冲突问题存在

测试开始

1先往 master1的 fwphp_data001中新建一个表

create table tb002(uid int not null auto_incrementuser varchar(20) not nullprimary key(uid))2在 master2上查看是否同步了 tb002表

[falconwwwfwphpcn 212012 ~]$ rm data10014wwwfwphpcn 删除 pid 和 err文件

[falconwwwfwphpcn 212441 ~]$ rm data10014info 删除中继日志文件

[falconwwwfwphpcn 212405 ~mysql]$ binmysql -uroot -p -S tmpmysql-10014sockmysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 | 不需要重新在此库上重建

| fwphp_data002 |

Master1mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 |+--------------------------+-------+2 rows in set (000 sec)Master2mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 || auto_increment_offset | 2 |+--------------------------+-------+2 rows in set (000 sec)

mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

6

步骤二初始化主 DB的数据库目录

步骤三启动主数据库

[falconwwwfwphpcn 155225 ~mysqletc]$ cd [falconwwwfwphpcn 155226 ~mysql]$ binmysql_install_db --datadir=~data10010

[falconwwwfwphpcn 155720 ~mysql]$ binmysqld_safe --defaults-file=etc10010cnf amp[falconwwwfwphpcn 155720 ~mysql]$ binmysql -uroot -p -S tmpmysql-10010sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 6Server version 5130-log Source distributionType help or h for help Type c to clear the buffer

mysqlgt

innodb_log_group_home_dir = homefalcondata10010 二进制日志目录

innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but beware of setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehash[isamchk]key_buffer = 8Msort_buffer_size = 8M[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

7

步骤四slave10011 的配置10011cnf

mysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TOuser001 IDENTIFIED BY user001 新建用于复制的帐号

mysqlgt flush privileges 刷新权限

mysqlgt create database fwphp_data001 创建数据库 fwphp_data001mysqlgt create database fwphp_data002 创建数据库 fwphp_data002

[falconwwwfwphpcn 155420 ~mysql]$ cp etcmy-smallcnf etc10011cnf[falconwwwfwphpcn 155420 ~mysql]$ vi etc10011cnf[client]port = 10011socket = tmpmysql-10011sock[mysqld]port = 10011socket = tmpmysql-10011sock

skip-lockingdatadir = homefalcondata10011 数据目录

key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

skip-networkingserver-id = 10011master-host=192168234140 主服务器 IPmaster-user=user001 复制帐号

master-password=user001 复制帐号的密码

master-port=10010 主服务器端口

master-connect-retry=5 连接到主服务器的间隔时间

replicate-do-db=fwphp_data001 需要复制的数据库名

replicate-do-db=fwphp_data002 需要复制的数据库名

Uncomment the following if you want to log updateslog-bin=homefalconlogs10011mysql-bin binlog 日志的存放路径

relay-log=homefalconlogs10011www-relay-bin 中继日志的存放路径

8

步骤五新建 slave10011的数据库文件及目录

在主数据库上对所有表进行读锁定

mysqlgt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 160436 ~data]$ cp -R 10010 10011 复制主服务器的数据文

件到从库

[falconwwwfwphpcn 160436 ~data]$ cd 10011[falconwwwfwphpcn 160532 ~data10011]$ rm wwwfwphpcn 删除 err和pid文件

binary logging format - mixed recommendedbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10011 InnoDB数据存放路径

innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10011 InnoDB日志存放路径

innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but beware of setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehashsafe-updates[isamchk]key_buffer = 8Msort_buffer_size = 8M[myisamchk]key_buffer = 8Msort_buffer_size = 8M[mysqlhotcopy]interactive-timeout

9

步骤六重复步骤四步骤五来新建 slave10012

到此主从数据库德配置文件及数据库文件新建完毕让我来启动从数据库吧

最后我们来测试主从 Replication 是否成功运行

Master上

mysqlgt show master status+------------------+----------+-----------------------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+-----------------------------+------------------+| mysql-bin000001 | 478 | fwphp_data001fwphp_data002 | |+------------------+----------+-----------------------------+------------------+1 row in set (001 sec)mysqlgt show processlist+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+| 4 | user001 | 19216823414044119 | NULL | Binlog Dump | 13847 | Has sent all binlogto slave waiting for binlog to be updated | NULL || 5 | user001 | 19216823414058946 | NULL | Binlog Dump | 13439 | Has sent all binlogto slave waiting for binlog to be updated | NULL || 6 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+3 rows in set (000 sec)

mysqlgt

[falconwwwfwphpcn 161035 ~mysql]$ binmysql -uroot -p -S tmpmysql-10011sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 4Server version 5130-log Source distribution

Type help or h for help Type c to clear the buffer

[falconwwwfwphpcn 160716 ~mysql]$ binmysqld_safe --defaults-file=etc10011cnf amp

[falconwwwfwphpcn 160740 ~mysql]$ binmysqld_safe --defaults-file=etc10011cnf amp

查看端口是否启动

[falconwwwfwphpcn 160752 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010010 0000 LISTENtcp 0 0 000010011 0000 LISTENtcp 0 0 000010012 0000 LISTEN

[falconwwwfwphpcn 160532 ~data10011]$ rm -rf ib_logfile 删除从主服务器数据

目录中的带过来的一些日志和错误日志等信息

10

同理在 slave 启动正常的情况下slave10012 会和 slave10011的状态一样

注如果有以下几种情况则说明 slave 没有能正常同步到master的数据如

1show slave status中 Slave_IO_State 的状态位空

2Slave_IO_Running NO3Slave_SQL_Running No4Last_IO_Error error connecting to master user00119216823414010001 - retry-time 1retries 86400这些情况下都表示主从同步失败那么怎么解决这些问题呢

在主上运行 show master status记录下 File 和 Position登录到从服务器上

Slave 10011上

mysqlgt show slave statusG 1 row

Slave_IO_State Waiting for master to send eventMaster_Host 192168234140Master_User user001Master_Port 10010

Connect_Retry 5Master_Log_File mysql-bin000001

Read_Master_Log_Pos 478Relay_Log_File www-relay-bin000003Relay_Log_Pos 251

Relay_Master_Log_File mysql-bin000001Slave_IO_Running YesSlave_SQL_Running YesReplicate_Do_DB fwphp_data001fwphp_data002

mysqlgt show processlist+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| 1 | system user | | NULL | Connect | 251480 | Waiting for master to send event| NULL || 2 | system user | | NULL | Connect | 251040 | Has read all relay log waitingfor the slave IO thread to update it | NULL || 4 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+3 rows in set (000 sec)

11

利用 change master to 修改从上同步主的 binlog 日志文件和同步点

常见方法是在从服务器上

这样在启动从后show slave status 就可以看到

Slave_IO_State Waiting for master to send eventSlave_IO_Running YesSlave_SQL_Running Yes以上出现 slave 不能同步主的数据主要可以通过这些方法来解决

下面来测试主从数据同步

Master上

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (001 sec)mysqlgt use fwphp_data001Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt stop slaveQuery OK 0 rows affected (001 sec)mysqlgt change master to

-gt master_host=192168234140 主服务器的 IP-gt master_user=user001 复制专业帐号

-gt master_password=user001 复制专用帐号的密码

-gt master_port=10010 主服务器端口

-gt master_log_file=mysql-bin000001 主服务器的当前 binlog 日志名

-gt master_log_pos=478 binlog 日志的还原点

-gt master_connect_retry=5 连接到主服务器同步的时间间隔

mysqlgt start slaveQuery OK 0 rows affected (001 sec)

12

在从库上查看是否数据同步成功

经过以上这些测试说明MySQL的主从配置成功在这个过程中或许会出现各种各样的错

误信息不要担心只要你把握住出现错误首先看错误日志然后把出现错误的主要信息放

到网上搜索一下会有很多解决方法呈现在你的面前最好不要忘了将出现错误的症状错

mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))ERROR 1223 (HY000) Cant execute the query because you have a conflicting read lockmysqlgt 出现以上错误主要是在上面步骤五时对主库的表进行了读锁定

mysqlgt unlock tablesQuery OK 0 rows affected (000 sec)mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))Query OK 0 rows affected (001 sec)mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (000 sec)

Slave10011 和 slave10012 上

mysqlgt use fwphp_data001Database changedmysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (001 sec)

mysqlgt desc tb001+----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+----------------+| uid | int(11) | NO | PRI | NULL | auto_increment || username | varchar(20) | NO | | NULL | |+----------+-------------+------+-----+---------+----------------+2 rows in set (001 sec)

13

误代码及解决方法发到 linuxtoneorg让更多的初学者避免出现类似的错误而无法进行以下

的学习

三MySQL 主主 Replication 解析

应用场景

① 双机冗余

② 写压力比较大

③ 数据高可用性安全性较强的场合

④ 单点故障

分析说明

对于写数据量大非常大的场合单台DB已经无法满足应用的需要这时可以

横向扩展 DB应用 2 台DB做主主的 Replication减小数据的写压力同时双主

数据保证了数据的完整性和安全性避免了单点故障

实例配置

配置说明

14

主主测试主要在一台服务器上测试所以我开起了 2 实例的方式来模拟主主数据库的复

制通过以上图片可以看出主要配置

Master119216823414010013 配置文件homefalconmysqletc10013cnfMaster219216823414010014 配置文件homefalconmysqletc10014cnf

配置过程

步骤一新建 master1master2的数据目录及配置文件

步骤二设置 master1的配置文件 10013cnf

[falconwwwfwphpcn 210614 ~mysql]$ vi etc10013cnf[client]password = your_passwordport = 10013socket = tmpmysql-10013sock

[mysqld]port = 10013socket = tmpmysql-10013sockskip-lockingdatadir = homefalcondata10013key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

server-id = 10013另一主的连接信息

master-host=192168234140master-user=user001master-password=user001

[falconwwwfwphpcn 210133 ~mysql]$ cp etcmy-smallcnf etc10013cnf[falconwwwfwphpcn 210144 ~mysql]$ cd [falconwwwfwphpcn 210223 ~]$ mkdir data10013[falconwwwfwphpcn 210223 ~]$ mkdir logs 10013 logs 10014[falconwwwfwphpcn 210317 ~]$cd mysql[falconwwwfwphpcn 210317 ~mysql]$ binmysql_install_db --datadir=homefalcondata10013 初始化 10013数据目录

15

master-port=10014master-connect-retry=1需要同步 binlog 的库

binlog-do-db=fwphp_data001binlog-do-db=fwphp_data002

解决双主主键冲突问题一个主用 auto_increment_increment=1auto_increment_offset=1的话另一个

应该是 auto_increment_increment=2auto_increment_offset=1auto_increment_increment 为步长

auto_increment_offset 从多少开始

auto_increment_increment=1 解决主键冲突master2上应该都设为 2auto_increment_offset=1

解决双主之间各有从时从不能更新另一个主插入的新数据

从服务器从主服务器那更新 binlog 日志到中继日志时同时也更新也更新自己的

binlog 日志

log-slave-updates

log-bin=homefalconlogs10013mysql-binrelay-log=homefalconlogs10013www-relay-binbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10013innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10013innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but bewareof setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M

16

步骤三初始化 master1

[mysql]no-auto-rehash

[isamchk]key_buffer = 8Msort_buffer_size = 8M

[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

[falconwwwfwphpcn 211543 ~mysql]$ binmysqld_safe --defaults-file=etc10013cnf amp[falconwwwfwphpcn 211550 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010013 0000 LISTEN[falconwwwfwphpcn 211552 ~mysql]$ binmysql -uroot -p -S tmpmysql-10013sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130-log Source distributionType help or h for help Type c to clear the buffermysqlgtmysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TO

-gt user001IDENTIFIED BY user001 新建复制帐号

Query OK 0 rows affected (000 sec)mysqlgt flush privileges 权限刷新使其立即生效

Query OK 0 rows affected (000 sec)mysqlgt create database fwphp_data001Query OK 1 row affected (000 sec)mysqlgt create database fwphp_data002Query OK 1 row affected (000 sec)

17

步骤四同步骤二设置 master2的 10014cnf文件(注意端口及目录名为 10014)

步骤五新建及初始化 master2数据文件

在master1下设置只读模式锁定表的写入保持主从之间的数据一致性

Mysql gt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 212002 ~]$ cp -R data10013 data10014[falconwwwfwphpcn 212006 ~]$ ls data10014fwphp_data001 fwphp_data002 ibdata1 ib_logfile0 ib_logfile1 masterinfo mysqlrelay-loginfo test wwwfwphpcnerr wwwfwphpcnpid[falconwwwfwphpcn 212008 ~]$ rm data10014ib_logfile

[falconwwwfwphpcn 211347 ~mysql]$ cp etc10013cnf etc10014cnf[falconwwwfwphpcn 211347 ~mysql]$ vi etc10014cnfserver-id = 10014另一主的连接信息

master-host=192168234140master-user=user001master-password=user001master-port=10013 此处为另一个主的端口

master-connect-retry=1 更主那更新 binlog 的时间间隔为 1 秒

auto_increment_increment=2 解决 2主在同时插入数据时的主键冲突问题

auto_increment_offset=2log-slave-updates

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (000 sec)

18

到此主主之间的复制就已经准备好了下面我们来测试一下主主之间数据的复制吧

在测试之前确保master1和master2 的 auto_increment_incrementauto_increment_offset值不能一样否则就会有主键冲突问题存在

测试开始

1先往 master1的 fwphp_data001中新建一个表

create table tb002(uid int not null auto_incrementuser varchar(20) not nullprimary key(uid))2在 master2上查看是否同步了 tb002表

[falconwwwfwphpcn 212012 ~]$ rm data10014wwwfwphpcn 删除 pid 和 err文件

[falconwwwfwphpcn 212441 ~]$ rm data10014info 删除中继日志文件

[falconwwwfwphpcn 212405 ~mysql]$ binmysql -uroot -p -S tmpmysql-10014sockmysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 | 不需要重新在此库上重建

| fwphp_data002 |

Master1mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 |+--------------------------+-------+2 rows in set (000 sec)Master2mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 || auto_increment_offset | 2 |+--------------------------+-------+2 rows in set (000 sec)

mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

7

步骤四slave10011 的配置10011cnf

mysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TOuser001 IDENTIFIED BY user001 新建用于复制的帐号

mysqlgt flush privileges 刷新权限

mysqlgt create database fwphp_data001 创建数据库 fwphp_data001mysqlgt create database fwphp_data002 创建数据库 fwphp_data002

[falconwwwfwphpcn 155420 ~mysql]$ cp etcmy-smallcnf etc10011cnf[falconwwwfwphpcn 155420 ~mysql]$ vi etc10011cnf[client]port = 10011socket = tmpmysql-10011sock[mysqld]port = 10011socket = tmpmysql-10011sock

skip-lockingdatadir = homefalcondata10011 数据目录

key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

skip-networkingserver-id = 10011master-host=192168234140 主服务器 IPmaster-user=user001 复制帐号

master-password=user001 复制帐号的密码

master-port=10010 主服务器端口

master-connect-retry=5 连接到主服务器的间隔时间

replicate-do-db=fwphp_data001 需要复制的数据库名

replicate-do-db=fwphp_data002 需要复制的数据库名

Uncomment the following if you want to log updateslog-bin=homefalconlogs10011mysql-bin binlog 日志的存放路径

relay-log=homefalconlogs10011www-relay-bin 中继日志的存放路径

8

步骤五新建 slave10011的数据库文件及目录

在主数据库上对所有表进行读锁定

mysqlgt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 160436 ~data]$ cp -R 10010 10011 复制主服务器的数据文

件到从库

[falconwwwfwphpcn 160436 ~data]$ cd 10011[falconwwwfwphpcn 160532 ~data10011]$ rm wwwfwphpcn 删除 err和pid文件

binary logging format - mixed recommendedbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10011 InnoDB数据存放路径

innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10011 InnoDB日志存放路径

innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but beware of setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehashsafe-updates[isamchk]key_buffer = 8Msort_buffer_size = 8M[myisamchk]key_buffer = 8Msort_buffer_size = 8M[mysqlhotcopy]interactive-timeout

9

步骤六重复步骤四步骤五来新建 slave10012

到此主从数据库德配置文件及数据库文件新建完毕让我来启动从数据库吧

最后我们来测试主从 Replication 是否成功运行

Master上

mysqlgt show master status+------------------+----------+-----------------------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+-----------------------------+------------------+| mysql-bin000001 | 478 | fwphp_data001fwphp_data002 | |+------------------+----------+-----------------------------+------------------+1 row in set (001 sec)mysqlgt show processlist+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+| 4 | user001 | 19216823414044119 | NULL | Binlog Dump | 13847 | Has sent all binlogto slave waiting for binlog to be updated | NULL || 5 | user001 | 19216823414058946 | NULL | Binlog Dump | 13439 | Has sent all binlogto slave waiting for binlog to be updated | NULL || 6 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+3 rows in set (000 sec)

mysqlgt

[falconwwwfwphpcn 161035 ~mysql]$ binmysql -uroot -p -S tmpmysql-10011sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 4Server version 5130-log Source distribution

Type help or h for help Type c to clear the buffer

[falconwwwfwphpcn 160716 ~mysql]$ binmysqld_safe --defaults-file=etc10011cnf amp

[falconwwwfwphpcn 160740 ~mysql]$ binmysqld_safe --defaults-file=etc10011cnf amp

查看端口是否启动

[falconwwwfwphpcn 160752 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010010 0000 LISTENtcp 0 0 000010011 0000 LISTENtcp 0 0 000010012 0000 LISTEN

[falconwwwfwphpcn 160532 ~data10011]$ rm -rf ib_logfile 删除从主服务器数据

目录中的带过来的一些日志和错误日志等信息

10

同理在 slave 启动正常的情况下slave10012 会和 slave10011的状态一样

注如果有以下几种情况则说明 slave 没有能正常同步到master的数据如

1show slave status中 Slave_IO_State 的状态位空

2Slave_IO_Running NO3Slave_SQL_Running No4Last_IO_Error error connecting to master user00119216823414010001 - retry-time 1retries 86400这些情况下都表示主从同步失败那么怎么解决这些问题呢

在主上运行 show master status记录下 File 和 Position登录到从服务器上

Slave 10011上

mysqlgt show slave statusG 1 row

Slave_IO_State Waiting for master to send eventMaster_Host 192168234140Master_User user001Master_Port 10010

Connect_Retry 5Master_Log_File mysql-bin000001

Read_Master_Log_Pos 478Relay_Log_File www-relay-bin000003Relay_Log_Pos 251

Relay_Master_Log_File mysql-bin000001Slave_IO_Running YesSlave_SQL_Running YesReplicate_Do_DB fwphp_data001fwphp_data002

mysqlgt show processlist+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| 1 | system user | | NULL | Connect | 251480 | Waiting for master to send event| NULL || 2 | system user | | NULL | Connect | 251040 | Has read all relay log waitingfor the slave IO thread to update it | NULL || 4 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+3 rows in set (000 sec)

11

利用 change master to 修改从上同步主的 binlog 日志文件和同步点

常见方法是在从服务器上

这样在启动从后show slave status 就可以看到

Slave_IO_State Waiting for master to send eventSlave_IO_Running YesSlave_SQL_Running Yes以上出现 slave 不能同步主的数据主要可以通过这些方法来解决

下面来测试主从数据同步

Master上

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (001 sec)mysqlgt use fwphp_data001Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt stop slaveQuery OK 0 rows affected (001 sec)mysqlgt change master to

-gt master_host=192168234140 主服务器的 IP-gt master_user=user001 复制专业帐号

-gt master_password=user001 复制专用帐号的密码

-gt master_port=10010 主服务器端口

-gt master_log_file=mysql-bin000001 主服务器的当前 binlog 日志名

-gt master_log_pos=478 binlog 日志的还原点

-gt master_connect_retry=5 连接到主服务器同步的时间间隔

mysqlgt start slaveQuery OK 0 rows affected (001 sec)

12

在从库上查看是否数据同步成功

经过以上这些测试说明MySQL的主从配置成功在这个过程中或许会出现各种各样的错

误信息不要担心只要你把握住出现错误首先看错误日志然后把出现错误的主要信息放

到网上搜索一下会有很多解决方法呈现在你的面前最好不要忘了将出现错误的症状错

mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))ERROR 1223 (HY000) Cant execute the query because you have a conflicting read lockmysqlgt 出现以上错误主要是在上面步骤五时对主库的表进行了读锁定

mysqlgt unlock tablesQuery OK 0 rows affected (000 sec)mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))Query OK 0 rows affected (001 sec)mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (000 sec)

Slave10011 和 slave10012 上

mysqlgt use fwphp_data001Database changedmysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (001 sec)

mysqlgt desc tb001+----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+----------------+| uid | int(11) | NO | PRI | NULL | auto_increment || username | varchar(20) | NO | | NULL | |+----------+-------------+------+-----+---------+----------------+2 rows in set (001 sec)

13

误代码及解决方法发到 linuxtoneorg让更多的初学者避免出现类似的错误而无法进行以下

的学习

三MySQL 主主 Replication 解析

应用场景

① 双机冗余

② 写压力比较大

③ 数据高可用性安全性较强的场合

④ 单点故障

分析说明

对于写数据量大非常大的场合单台DB已经无法满足应用的需要这时可以

横向扩展 DB应用 2 台DB做主主的 Replication减小数据的写压力同时双主

数据保证了数据的完整性和安全性避免了单点故障

实例配置

配置说明

14

主主测试主要在一台服务器上测试所以我开起了 2 实例的方式来模拟主主数据库的复

制通过以上图片可以看出主要配置

Master119216823414010013 配置文件homefalconmysqletc10013cnfMaster219216823414010014 配置文件homefalconmysqletc10014cnf

配置过程

步骤一新建 master1master2的数据目录及配置文件

步骤二设置 master1的配置文件 10013cnf

[falconwwwfwphpcn 210614 ~mysql]$ vi etc10013cnf[client]password = your_passwordport = 10013socket = tmpmysql-10013sock

[mysqld]port = 10013socket = tmpmysql-10013sockskip-lockingdatadir = homefalcondata10013key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

server-id = 10013另一主的连接信息

master-host=192168234140master-user=user001master-password=user001

[falconwwwfwphpcn 210133 ~mysql]$ cp etcmy-smallcnf etc10013cnf[falconwwwfwphpcn 210144 ~mysql]$ cd [falconwwwfwphpcn 210223 ~]$ mkdir data10013[falconwwwfwphpcn 210223 ~]$ mkdir logs 10013 logs 10014[falconwwwfwphpcn 210317 ~]$cd mysql[falconwwwfwphpcn 210317 ~mysql]$ binmysql_install_db --datadir=homefalcondata10013 初始化 10013数据目录

15

master-port=10014master-connect-retry=1需要同步 binlog 的库

binlog-do-db=fwphp_data001binlog-do-db=fwphp_data002

解决双主主键冲突问题一个主用 auto_increment_increment=1auto_increment_offset=1的话另一个

应该是 auto_increment_increment=2auto_increment_offset=1auto_increment_increment 为步长

auto_increment_offset 从多少开始

auto_increment_increment=1 解决主键冲突master2上应该都设为 2auto_increment_offset=1

解决双主之间各有从时从不能更新另一个主插入的新数据

从服务器从主服务器那更新 binlog 日志到中继日志时同时也更新也更新自己的

binlog 日志

log-slave-updates

log-bin=homefalconlogs10013mysql-binrelay-log=homefalconlogs10013www-relay-binbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10013innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10013innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but bewareof setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M

16

步骤三初始化 master1

[mysql]no-auto-rehash

[isamchk]key_buffer = 8Msort_buffer_size = 8M

[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

[falconwwwfwphpcn 211543 ~mysql]$ binmysqld_safe --defaults-file=etc10013cnf amp[falconwwwfwphpcn 211550 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010013 0000 LISTEN[falconwwwfwphpcn 211552 ~mysql]$ binmysql -uroot -p -S tmpmysql-10013sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130-log Source distributionType help or h for help Type c to clear the buffermysqlgtmysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TO

-gt user001IDENTIFIED BY user001 新建复制帐号

Query OK 0 rows affected (000 sec)mysqlgt flush privileges 权限刷新使其立即生效

Query OK 0 rows affected (000 sec)mysqlgt create database fwphp_data001Query OK 1 row affected (000 sec)mysqlgt create database fwphp_data002Query OK 1 row affected (000 sec)

17

步骤四同步骤二设置 master2的 10014cnf文件(注意端口及目录名为 10014)

步骤五新建及初始化 master2数据文件

在master1下设置只读模式锁定表的写入保持主从之间的数据一致性

Mysql gt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 212002 ~]$ cp -R data10013 data10014[falconwwwfwphpcn 212006 ~]$ ls data10014fwphp_data001 fwphp_data002 ibdata1 ib_logfile0 ib_logfile1 masterinfo mysqlrelay-loginfo test wwwfwphpcnerr wwwfwphpcnpid[falconwwwfwphpcn 212008 ~]$ rm data10014ib_logfile

[falconwwwfwphpcn 211347 ~mysql]$ cp etc10013cnf etc10014cnf[falconwwwfwphpcn 211347 ~mysql]$ vi etc10014cnfserver-id = 10014另一主的连接信息

master-host=192168234140master-user=user001master-password=user001master-port=10013 此处为另一个主的端口

master-connect-retry=1 更主那更新 binlog 的时间间隔为 1 秒

auto_increment_increment=2 解决 2主在同时插入数据时的主键冲突问题

auto_increment_offset=2log-slave-updates

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (000 sec)

18

到此主主之间的复制就已经准备好了下面我们来测试一下主主之间数据的复制吧

在测试之前确保master1和master2 的 auto_increment_incrementauto_increment_offset值不能一样否则就会有主键冲突问题存在

测试开始

1先往 master1的 fwphp_data001中新建一个表

create table tb002(uid int not null auto_incrementuser varchar(20) not nullprimary key(uid))2在 master2上查看是否同步了 tb002表

[falconwwwfwphpcn 212012 ~]$ rm data10014wwwfwphpcn 删除 pid 和 err文件

[falconwwwfwphpcn 212441 ~]$ rm data10014info 删除中继日志文件

[falconwwwfwphpcn 212405 ~mysql]$ binmysql -uroot -p -S tmpmysql-10014sockmysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 | 不需要重新在此库上重建

| fwphp_data002 |

Master1mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 |+--------------------------+-------+2 rows in set (000 sec)Master2mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 || auto_increment_offset | 2 |+--------------------------+-------+2 rows in set (000 sec)

mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

8

步骤五新建 slave10011的数据库文件及目录

在主数据库上对所有表进行读锁定

mysqlgt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 160436 ~data]$ cp -R 10010 10011 复制主服务器的数据文

件到从库

[falconwwwfwphpcn 160436 ~data]$ cd 10011[falconwwwfwphpcn 160532 ~data10011]$ rm wwwfwphpcn 删除 err和pid文件

binary logging format - mixed recommendedbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10011 InnoDB数据存放路径

innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10011 InnoDB日志存放路径

innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but beware of setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehashsafe-updates[isamchk]key_buffer = 8Msort_buffer_size = 8M[myisamchk]key_buffer = 8Msort_buffer_size = 8M[mysqlhotcopy]interactive-timeout

9

步骤六重复步骤四步骤五来新建 slave10012

到此主从数据库德配置文件及数据库文件新建完毕让我来启动从数据库吧

最后我们来测试主从 Replication 是否成功运行

Master上

mysqlgt show master status+------------------+----------+-----------------------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+-----------------------------+------------------+| mysql-bin000001 | 478 | fwphp_data001fwphp_data002 | |+------------------+----------+-----------------------------+------------------+1 row in set (001 sec)mysqlgt show processlist+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+| 4 | user001 | 19216823414044119 | NULL | Binlog Dump | 13847 | Has sent all binlogto slave waiting for binlog to be updated | NULL || 5 | user001 | 19216823414058946 | NULL | Binlog Dump | 13439 | Has sent all binlogto slave waiting for binlog to be updated | NULL || 6 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+3 rows in set (000 sec)

mysqlgt

[falconwwwfwphpcn 161035 ~mysql]$ binmysql -uroot -p -S tmpmysql-10011sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 4Server version 5130-log Source distribution

Type help or h for help Type c to clear the buffer

[falconwwwfwphpcn 160716 ~mysql]$ binmysqld_safe --defaults-file=etc10011cnf amp

[falconwwwfwphpcn 160740 ~mysql]$ binmysqld_safe --defaults-file=etc10011cnf amp

查看端口是否启动

[falconwwwfwphpcn 160752 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010010 0000 LISTENtcp 0 0 000010011 0000 LISTENtcp 0 0 000010012 0000 LISTEN

[falconwwwfwphpcn 160532 ~data10011]$ rm -rf ib_logfile 删除从主服务器数据

目录中的带过来的一些日志和错误日志等信息

10

同理在 slave 启动正常的情况下slave10012 会和 slave10011的状态一样

注如果有以下几种情况则说明 slave 没有能正常同步到master的数据如

1show slave status中 Slave_IO_State 的状态位空

2Slave_IO_Running NO3Slave_SQL_Running No4Last_IO_Error error connecting to master user00119216823414010001 - retry-time 1retries 86400这些情况下都表示主从同步失败那么怎么解决这些问题呢

在主上运行 show master status记录下 File 和 Position登录到从服务器上

Slave 10011上

mysqlgt show slave statusG 1 row

Slave_IO_State Waiting for master to send eventMaster_Host 192168234140Master_User user001Master_Port 10010

Connect_Retry 5Master_Log_File mysql-bin000001

Read_Master_Log_Pos 478Relay_Log_File www-relay-bin000003Relay_Log_Pos 251

Relay_Master_Log_File mysql-bin000001Slave_IO_Running YesSlave_SQL_Running YesReplicate_Do_DB fwphp_data001fwphp_data002

mysqlgt show processlist+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| 1 | system user | | NULL | Connect | 251480 | Waiting for master to send event| NULL || 2 | system user | | NULL | Connect | 251040 | Has read all relay log waitingfor the slave IO thread to update it | NULL || 4 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+3 rows in set (000 sec)

11

利用 change master to 修改从上同步主的 binlog 日志文件和同步点

常见方法是在从服务器上

这样在启动从后show slave status 就可以看到

Slave_IO_State Waiting for master to send eventSlave_IO_Running YesSlave_SQL_Running Yes以上出现 slave 不能同步主的数据主要可以通过这些方法来解决

下面来测试主从数据同步

Master上

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (001 sec)mysqlgt use fwphp_data001Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt stop slaveQuery OK 0 rows affected (001 sec)mysqlgt change master to

-gt master_host=192168234140 主服务器的 IP-gt master_user=user001 复制专业帐号

-gt master_password=user001 复制专用帐号的密码

-gt master_port=10010 主服务器端口

-gt master_log_file=mysql-bin000001 主服务器的当前 binlog 日志名

-gt master_log_pos=478 binlog 日志的还原点

-gt master_connect_retry=5 连接到主服务器同步的时间间隔

mysqlgt start slaveQuery OK 0 rows affected (001 sec)

12

在从库上查看是否数据同步成功

经过以上这些测试说明MySQL的主从配置成功在这个过程中或许会出现各种各样的错

误信息不要担心只要你把握住出现错误首先看错误日志然后把出现错误的主要信息放

到网上搜索一下会有很多解决方法呈现在你的面前最好不要忘了将出现错误的症状错

mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))ERROR 1223 (HY000) Cant execute the query because you have a conflicting read lockmysqlgt 出现以上错误主要是在上面步骤五时对主库的表进行了读锁定

mysqlgt unlock tablesQuery OK 0 rows affected (000 sec)mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))Query OK 0 rows affected (001 sec)mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (000 sec)

Slave10011 和 slave10012 上

mysqlgt use fwphp_data001Database changedmysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (001 sec)

mysqlgt desc tb001+----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+----------------+| uid | int(11) | NO | PRI | NULL | auto_increment || username | varchar(20) | NO | | NULL | |+----------+-------------+------+-----+---------+----------------+2 rows in set (001 sec)

13

误代码及解决方法发到 linuxtoneorg让更多的初学者避免出现类似的错误而无法进行以下

的学习

三MySQL 主主 Replication 解析

应用场景

① 双机冗余

② 写压力比较大

③ 数据高可用性安全性较强的场合

④ 单点故障

分析说明

对于写数据量大非常大的场合单台DB已经无法满足应用的需要这时可以

横向扩展 DB应用 2 台DB做主主的 Replication减小数据的写压力同时双主

数据保证了数据的完整性和安全性避免了单点故障

实例配置

配置说明

14

主主测试主要在一台服务器上测试所以我开起了 2 实例的方式来模拟主主数据库的复

制通过以上图片可以看出主要配置

Master119216823414010013 配置文件homefalconmysqletc10013cnfMaster219216823414010014 配置文件homefalconmysqletc10014cnf

配置过程

步骤一新建 master1master2的数据目录及配置文件

步骤二设置 master1的配置文件 10013cnf

[falconwwwfwphpcn 210614 ~mysql]$ vi etc10013cnf[client]password = your_passwordport = 10013socket = tmpmysql-10013sock

[mysqld]port = 10013socket = tmpmysql-10013sockskip-lockingdatadir = homefalcondata10013key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

server-id = 10013另一主的连接信息

master-host=192168234140master-user=user001master-password=user001

[falconwwwfwphpcn 210133 ~mysql]$ cp etcmy-smallcnf etc10013cnf[falconwwwfwphpcn 210144 ~mysql]$ cd [falconwwwfwphpcn 210223 ~]$ mkdir data10013[falconwwwfwphpcn 210223 ~]$ mkdir logs 10013 logs 10014[falconwwwfwphpcn 210317 ~]$cd mysql[falconwwwfwphpcn 210317 ~mysql]$ binmysql_install_db --datadir=homefalcondata10013 初始化 10013数据目录

15

master-port=10014master-connect-retry=1需要同步 binlog 的库

binlog-do-db=fwphp_data001binlog-do-db=fwphp_data002

解决双主主键冲突问题一个主用 auto_increment_increment=1auto_increment_offset=1的话另一个

应该是 auto_increment_increment=2auto_increment_offset=1auto_increment_increment 为步长

auto_increment_offset 从多少开始

auto_increment_increment=1 解决主键冲突master2上应该都设为 2auto_increment_offset=1

解决双主之间各有从时从不能更新另一个主插入的新数据

从服务器从主服务器那更新 binlog 日志到中继日志时同时也更新也更新自己的

binlog 日志

log-slave-updates

log-bin=homefalconlogs10013mysql-binrelay-log=homefalconlogs10013www-relay-binbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10013innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10013innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but bewareof setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M

16

步骤三初始化 master1

[mysql]no-auto-rehash

[isamchk]key_buffer = 8Msort_buffer_size = 8M

[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

[falconwwwfwphpcn 211543 ~mysql]$ binmysqld_safe --defaults-file=etc10013cnf amp[falconwwwfwphpcn 211550 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010013 0000 LISTEN[falconwwwfwphpcn 211552 ~mysql]$ binmysql -uroot -p -S tmpmysql-10013sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130-log Source distributionType help or h for help Type c to clear the buffermysqlgtmysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TO

-gt user001IDENTIFIED BY user001 新建复制帐号

Query OK 0 rows affected (000 sec)mysqlgt flush privileges 权限刷新使其立即生效

Query OK 0 rows affected (000 sec)mysqlgt create database fwphp_data001Query OK 1 row affected (000 sec)mysqlgt create database fwphp_data002Query OK 1 row affected (000 sec)

17

步骤四同步骤二设置 master2的 10014cnf文件(注意端口及目录名为 10014)

步骤五新建及初始化 master2数据文件

在master1下设置只读模式锁定表的写入保持主从之间的数据一致性

Mysql gt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 212002 ~]$ cp -R data10013 data10014[falconwwwfwphpcn 212006 ~]$ ls data10014fwphp_data001 fwphp_data002 ibdata1 ib_logfile0 ib_logfile1 masterinfo mysqlrelay-loginfo test wwwfwphpcnerr wwwfwphpcnpid[falconwwwfwphpcn 212008 ~]$ rm data10014ib_logfile

[falconwwwfwphpcn 211347 ~mysql]$ cp etc10013cnf etc10014cnf[falconwwwfwphpcn 211347 ~mysql]$ vi etc10014cnfserver-id = 10014另一主的连接信息

master-host=192168234140master-user=user001master-password=user001master-port=10013 此处为另一个主的端口

master-connect-retry=1 更主那更新 binlog 的时间间隔为 1 秒

auto_increment_increment=2 解决 2主在同时插入数据时的主键冲突问题

auto_increment_offset=2log-slave-updates

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (000 sec)

18

到此主主之间的复制就已经准备好了下面我们来测试一下主主之间数据的复制吧

在测试之前确保master1和master2 的 auto_increment_incrementauto_increment_offset值不能一样否则就会有主键冲突问题存在

测试开始

1先往 master1的 fwphp_data001中新建一个表

create table tb002(uid int not null auto_incrementuser varchar(20) not nullprimary key(uid))2在 master2上查看是否同步了 tb002表

[falconwwwfwphpcn 212012 ~]$ rm data10014wwwfwphpcn 删除 pid 和 err文件

[falconwwwfwphpcn 212441 ~]$ rm data10014info 删除中继日志文件

[falconwwwfwphpcn 212405 ~mysql]$ binmysql -uroot -p -S tmpmysql-10014sockmysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 | 不需要重新在此库上重建

| fwphp_data002 |

Master1mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 |+--------------------------+-------+2 rows in set (000 sec)Master2mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 || auto_increment_offset | 2 |+--------------------------+-------+2 rows in set (000 sec)

mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

9

步骤六重复步骤四步骤五来新建 slave10012

到此主从数据库德配置文件及数据库文件新建完毕让我来启动从数据库吧

最后我们来测试主从 Replication 是否成功运行

Master上

mysqlgt show master status+------------------+----------+-----------------------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+-----------------------------+------------------+| mysql-bin000001 | 478 | fwphp_data001fwphp_data002 | |+------------------+----------+-----------------------------+------------------+1 row in set (001 sec)mysqlgt show processlist+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+| 4 | user001 | 19216823414044119 | NULL | Binlog Dump | 13847 | Has sent all binlogto slave waiting for binlog to be updated | NULL || 5 | user001 | 19216823414058946 | NULL | Binlog Dump | 13439 | Has sent all binlogto slave waiting for binlog to be updated | NULL || 6 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+---------+-----------------------+------+-------------+-------+----------------------------------------------------------------+------------------+3 rows in set (000 sec)

mysqlgt

[falconwwwfwphpcn 161035 ~mysql]$ binmysql -uroot -p -S tmpmysql-10011sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 4Server version 5130-log Source distribution

Type help or h for help Type c to clear the buffer

[falconwwwfwphpcn 160716 ~mysql]$ binmysqld_safe --defaults-file=etc10011cnf amp

[falconwwwfwphpcn 160740 ~mysql]$ binmysqld_safe --defaults-file=etc10011cnf amp

查看端口是否启动

[falconwwwfwphpcn 160752 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010010 0000 LISTENtcp 0 0 000010011 0000 LISTENtcp 0 0 000010012 0000 LISTEN

[falconwwwfwphpcn 160532 ~data10011]$ rm -rf ib_logfile 删除从主服务器数据

目录中的带过来的一些日志和错误日志等信息

10

同理在 slave 启动正常的情况下slave10012 会和 slave10011的状态一样

注如果有以下几种情况则说明 slave 没有能正常同步到master的数据如

1show slave status中 Slave_IO_State 的状态位空

2Slave_IO_Running NO3Slave_SQL_Running No4Last_IO_Error error connecting to master user00119216823414010001 - retry-time 1retries 86400这些情况下都表示主从同步失败那么怎么解决这些问题呢

在主上运行 show master status记录下 File 和 Position登录到从服务器上

Slave 10011上

mysqlgt show slave statusG 1 row

Slave_IO_State Waiting for master to send eventMaster_Host 192168234140Master_User user001Master_Port 10010

Connect_Retry 5Master_Log_File mysql-bin000001

Read_Master_Log_Pos 478Relay_Log_File www-relay-bin000003Relay_Log_Pos 251

Relay_Master_Log_File mysql-bin000001Slave_IO_Running YesSlave_SQL_Running YesReplicate_Do_DB fwphp_data001fwphp_data002

mysqlgt show processlist+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| 1 | system user | | NULL | Connect | 251480 | Waiting for master to send event| NULL || 2 | system user | | NULL | Connect | 251040 | Has read all relay log waitingfor the slave IO thread to update it | NULL || 4 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+3 rows in set (000 sec)

11

利用 change master to 修改从上同步主的 binlog 日志文件和同步点

常见方法是在从服务器上

这样在启动从后show slave status 就可以看到

Slave_IO_State Waiting for master to send eventSlave_IO_Running YesSlave_SQL_Running Yes以上出现 slave 不能同步主的数据主要可以通过这些方法来解决

下面来测试主从数据同步

Master上

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (001 sec)mysqlgt use fwphp_data001Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt stop slaveQuery OK 0 rows affected (001 sec)mysqlgt change master to

-gt master_host=192168234140 主服务器的 IP-gt master_user=user001 复制专业帐号

-gt master_password=user001 复制专用帐号的密码

-gt master_port=10010 主服务器端口

-gt master_log_file=mysql-bin000001 主服务器的当前 binlog 日志名

-gt master_log_pos=478 binlog 日志的还原点

-gt master_connect_retry=5 连接到主服务器同步的时间间隔

mysqlgt start slaveQuery OK 0 rows affected (001 sec)

12

在从库上查看是否数据同步成功

经过以上这些测试说明MySQL的主从配置成功在这个过程中或许会出现各种各样的错

误信息不要担心只要你把握住出现错误首先看错误日志然后把出现错误的主要信息放

到网上搜索一下会有很多解决方法呈现在你的面前最好不要忘了将出现错误的症状错

mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))ERROR 1223 (HY000) Cant execute the query because you have a conflicting read lockmysqlgt 出现以上错误主要是在上面步骤五时对主库的表进行了读锁定

mysqlgt unlock tablesQuery OK 0 rows affected (000 sec)mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))Query OK 0 rows affected (001 sec)mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (000 sec)

Slave10011 和 slave10012 上

mysqlgt use fwphp_data001Database changedmysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (001 sec)

mysqlgt desc tb001+----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+----------------+| uid | int(11) | NO | PRI | NULL | auto_increment || username | varchar(20) | NO | | NULL | |+----------+-------------+------+-----+---------+----------------+2 rows in set (001 sec)

13

误代码及解决方法发到 linuxtoneorg让更多的初学者避免出现类似的错误而无法进行以下

的学习

三MySQL 主主 Replication 解析

应用场景

① 双机冗余

② 写压力比较大

③ 数据高可用性安全性较强的场合

④ 单点故障

分析说明

对于写数据量大非常大的场合单台DB已经无法满足应用的需要这时可以

横向扩展 DB应用 2 台DB做主主的 Replication减小数据的写压力同时双主

数据保证了数据的完整性和安全性避免了单点故障

实例配置

配置说明

14

主主测试主要在一台服务器上测试所以我开起了 2 实例的方式来模拟主主数据库的复

制通过以上图片可以看出主要配置

Master119216823414010013 配置文件homefalconmysqletc10013cnfMaster219216823414010014 配置文件homefalconmysqletc10014cnf

配置过程

步骤一新建 master1master2的数据目录及配置文件

步骤二设置 master1的配置文件 10013cnf

[falconwwwfwphpcn 210614 ~mysql]$ vi etc10013cnf[client]password = your_passwordport = 10013socket = tmpmysql-10013sock

[mysqld]port = 10013socket = tmpmysql-10013sockskip-lockingdatadir = homefalcondata10013key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

server-id = 10013另一主的连接信息

master-host=192168234140master-user=user001master-password=user001

[falconwwwfwphpcn 210133 ~mysql]$ cp etcmy-smallcnf etc10013cnf[falconwwwfwphpcn 210144 ~mysql]$ cd [falconwwwfwphpcn 210223 ~]$ mkdir data10013[falconwwwfwphpcn 210223 ~]$ mkdir logs 10013 logs 10014[falconwwwfwphpcn 210317 ~]$cd mysql[falconwwwfwphpcn 210317 ~mysql]$ binmysql_install_db --datadir=homefalcondata10013 初始化 10013数据目录

15

master-port=10014master-connect-retry=1需要同步 binlog 的库

binlog-do-db=fwphp_data001binlog-do-db=fwphp_data002

解决双主主键冲突问题一个主用 auto_increment_increment=1auto_increment_offset=1的话另一个

应该是 auto_increment_increment=2auto_increment_offset=1auto_increment_increment 为步长

auto_increment_offset 从多少开始

auto_increment_increment=1 解决主键冲突master2上应该都设为 2auto_increment_offset=1

解决双主之间各有从时从不能更新另一个主插入的新数据

从服务器从主服务器那更新 binlog 日志到中继日志时同时也更新也更新自己的

binlog 日志

log-slave-updates

log-bin=homefalconlogs10013mysql-binrelay-log=homefalconlogs10013www-relay-binbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10013innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10013innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but bewareof setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M

16

步骤三初始化 master1

[mysql]no-auto-rehash

[isamchk]key_buffer = 8Msort_buffer_size = 8M

[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

[falconwwwfwphpcn 211543 ~mysql]$ binmysqld_safe --defaults-file=etc10013cnf amp[falconwwwfwphpcn 211550 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010013 0000 LISTEN[falconwwwfwphpcn 211552 ~mysql]$ binmysql -uroot -p -S tmpmysql-10013sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130-log Source distributionType help or h for help Type c to clear the buffermysqlgtmysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TO

-gt user001IDENTIFIED BY user001 新建复制帐号

Query OK 0 rows affected (000 sec)mysqlgt flush privileges 权限刷新使其立即生效

Query OK 0 rows affected (000 sec)mysqlgt create database fwphp_data001Query OK 1 row affected (000 sec)mysqlgt create database fwphp_data002Query OK 1 row affected (000 sec)

17

步骤四同步骤二设置 master2的 10014cnf文件(注意端口及目录名为 10014)

步骤五新建及初始化 master2数据文件

在master1下设置只读模式锁定表的写入保持主从之间的数据一致性

Mysql gt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 212002 ~]$ cp -R data10013 data10014[falconwwwfwphpcn 212006 ~]$ ls data10014fwphp_data001 fwphp_data002 ibdata1 ib_logfile0 ib_logfile1 masterinfo mysqlrelay-loginfo test wwwfwphpcnerr wwwfwphpcnpid[falconwwwfwphpcn 212008 ~]$ rm data10014ib_logfile

[falconwwwfwphpcn 211347 ~mysql]$ cp etc10013cnf etc10014cnf[falconwwwfwphpcn 211347 ~mysql]$ vi etc10014cnfserver-id = 10014另一主的连接信息

master-host=192168234140master-user=user001master-password=user001master-port=10013 此处为另一个主的端口

master-connect-retry=1 更主那更新 binlog 的时间间隔为 1 秒

auto_increment_increment=2 解决 2主在同时插入数据时的主键冲突问题

auto_increment_offset=2log-slave-updates

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (000 sec)

18

到此主主之间的复制就已经准备好了下面我们来测试一下主主之间数据的复制吧

在测试之前确保master1和master2 的 auto_increment_incrementauto_increment_offset值不能一样否则就会有主键冲突问题存在

测试开始

1先往 master1的 fwphp_data001中新建一个表

create table tb002(uid int not null auto_incrementuser varchar(20) not nullprimary key(uid))2在 master2上查看是否同步了 tb002表

[falconwwwfwphpcn 212012 ~]$ rm data10014wwwfwphpcn 删除 pid 和 err文件

[falconwwwfwphpcn 212441 ~]$ rm data10014info 删除中继日志文件

[falconwwwfwphpcn 212405 ~mysql]$ binmysql -uroot -p -S tmpmysql-10014sockmysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 | 不需要重新在此库上重建

| fwphp_data002 |

Master1mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 |+--------------------------+-------+2 rows in set (000 sec)Master2mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 || auto_increment_offset | 2 |+--------------------------+-------+2 rows in set (000 sec)

mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

10

同理在 slave 启动正常的情况下slave10012 会和 slave10011的状态一样

注如果有以下几种情况则说明 slave 没有能正常同步到master的数据如

1show slave status中 Slave_IO_State 的状态位空

2Slave_IO_Running NO3Slave_SQL_Running No4Last_IO_Error error connecting to master user00119216823414010001 - retry-time 1retries 86400这些情况下都表示主从同步失败那么怎么解决这些问题呢

在主上运行 show master status记录下 File 和 Position登录到从服务器上

Slave 10011上

mysqlgt show slave statusG 1 row

Slave_IO_State Waiting for master to send eventMaster_Host 192168234140Master_User user001Master_Port 10010

Connect_Retry 5Master_Log_File mysql-bin000001

Read_Master_Log_Pos 478Relay_Log_File www-relay-bin000003Relay_Log_Pos 251

Relay_Master_Log_File mysql-bin000001Slave_IO_Running YesSlave_SQL_Running YesReplicate_Do_DB fwphp_data001fwphp_data002

mysqlgt show processlist+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| Id | User | Host | db | Command | Time | State| Info |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+| 1 | system user | | NULL | Connect | 251480 | Waiting for master to send event| NULL || 2 | system user | | NULL | Connect | 251040 | Has read all relay log waitingfor the slave IO thread to update it | NULL || 4 | root | localhost | NULL | Query | 0 | NULL| show processlist |+----+-------------+-----------+------+---------+--------+-----------------------------------------------------------------------+------------------+3 rows in set (000 sec)

11

利用 change master to 修改从上同步主的 binlog 日志文件和同步点

常见方法是在从服务器上

这样在启动从后show slave status 就可以看到

Slave_IO_State Waiting for master to send eventSlave_IO_Running YesSlave_SQL_Running Yes以上出现 slave 不能同步主的数据主要可以通过这些方法来解决

下面来测试主从数据同步

Master上

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (001 sec)mysqlgt use fwphp_data001Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt stop slaveQuery OK 0 rows affected (001 sec)mysqlgt change master to

-gt master_host=192168234140 主服务器的 IP-gt master_user=user001 复制专业帐号

-gt master_password=user001 复制专用帐号的密码

-gt master_port=10010 主服务器端口

-gt master_log_file=mysql-bin000001 主服务器的当前 binlog 日志名

-gt master_log_pos=478 binlog 日志的还原点

-gt master_connect_retry=5 连接到主服务器同步的时间间隔

mysqlgt start slaveQuery OK 0 rows affected (001 sec)

12

在从库上查看是否数据同步成功

经过以上这些测试说明MySQL的主从配置成功在这个过程中或许会出现各种各样的错

误信息不要担心只要你把握住出现错误首先看错误日志然后把出现错误的主要信息放

到网上搜索一下会有很多解决方法呈现在你的面前最好不要忘了将出现错误的症状错

mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))ERROR 1223 (HY000) Cant execute the query because you have a conflicting read lockmysqlgt 出现以上错误主要是在上面步骤五时对主库的表进行了读锁定

mysqlgt unlock tablesQuery OK 0 rows affected (000 sec)mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))Query OK 0 rows affected (001 sec)mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (000 sec)

Slave10011 和 slave10012 上

mysqlgt use fwphp_data001Database changedmysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (001 sec)

mysqlgt desc tb001+----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+----------------+| uid | int(11) | NO | PRI | NULL | auto_increment || username | varchar(20) | NO | | NULL | |+----------+-------------+------+-----+---------+----------------+2 rows in set (001 sec)

13

误代码及解决方法发到 linuxtoneorg让更多的初学者避免出现类似的错误而无法进行以下

的学习

三MySQL 主主 Replication 解析

应用场景

① 双机冗余

② 写压力比较大

③ 数据高可用性安全性较强的场合

④ 单点故障

分析说明

对于写数据量大非常大的场合单台DB已经无法满足应用的需要这时可以

横向扩展 DB应用 2 台DB做主主的 Replication减小数据的写压力同时双主

数据保证了数据的完整性和安全性避免了单点故障

实例配置

配置说明

14

主主测试主要在一台服务器上测试所以我开起了 2 实例的方式来模拟主主数据库的复

制通过以上图片可以看出主要配置

Master119216823414010013 配置文件homefalconmysqletc10013cnfMaster219216823414010014 配置文件homefalconmysqletc10014cnf

配置过程

步骤一新建 master1master2的数据目录及配置文件

步骤二设置 master1的配置文件 10013cnf

[falconwwwfwphpcn 210614 ~mysql]$ vi etc10013cnf[client]password = your_passwordport = 10013socket = tmpmysql-10013sock

[mysqld]port = 10013socket = tmpmysql-10013sockskip-lockingdatadir = homefalcondata10013key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

server-id = 10013另一主的连接信息

master-host=192168234140master-user=user001master-password=user001

[falconwwwfwphpcn 210133 ~mysql]$ cp etcmy-smallcnf etc10013cnf[falconwwwfwphpcn 210144 ~mysql]$ cd [falconwwwfwphpcn 210223 ~]$ mkdir data10013[falconwwwfwphpcn 210223 ~]$ mkdir logs 10013 logs 10014[falconwwwfwphpcn 210317 ~]$cd mysql[falconwwwfwphpcn 210317 ~mysql]$ binmysql_install_db --datadir=homefalcondata10013 初始化 10013数据目录

15

master-port=10014master-connect-retry=1需要同步 binlog 的库

binlog-do-db=fwphp_data001binlog-do-db=fwphp_data002

解决双主主键冲突问题一个主用 auto_increment_increment=1auto_increment_offset=1的话另一个

应该是 auto_increment_increment=2auto_increment_offset=1auto_increment_increment 为步长

auto_increment_offset 从多少开始

auto_increment_increment=1 解决主键冲突master2上应该都设为 2auto_increment_offset=1

解决双主之间各有从时从不能更新另一个主插入的新数据

从服务器从主服务器那更新 binlog 日志到中继日志时同时也更新也更新自己的

binlog 日志

log-slave-updates

log-bin=homefalconlogs10013mysql-binrelay-log=homefalconlogs10013www-relay-binbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10013innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10013innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but bewareof setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M

16

步骤三初始化 master1

[mysql]no-auto-rehash

[isamchk]key_buffer = 8Msort_buffer_size = 8M

[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

[falconwwwfwphpcn 211543 ~mysql]$ binmysqld_safe --defaults-file=etc10013cnf amp[falconwwwfwphpcn 211550 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010013 0000 LISTEN[falconwwwfwphpcn 211552 ~mysql]$ binmysql -uroot -p -S tmpmysql-10013sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130-log Source distributionType help or h for help Type c to clear the buffermysqlgtmysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TO

-gt user001IDENTIFIED BY user001 新建复制帐号

Query OK 0 rows affected (000 sec)mysqlgt flush privileges 权限刷新使其立即生效

Query OK 0 rows affected (000 sec)mysqlgt create database fwphp_data001Query OK 1 row affected (000 sec)mysqlgt create database fwphp_data002Query OK 1 row affected (000 sec)

17

步骤四同步骤二设置 master2的 10014cnf文件(注意端口及目录名为 10014)

步骤五新建及初始化 master2数据文件

在master1下设置只读模式锁定表的写入保持主从之间的数据一致性

Mysql gt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 212002 ~]$ cp -R data10013 data10014[falconwwwfwphpcn 212006 ~]$ ls data10014fwphp_data001 fwphp_data002 ibdata1 ib_logfile0 ib_logfile1 masterinfo mysqlrelay-loginfo test wwwfwphpcnerr wwwfwphpcnpid[falconwwwfwphpcn 212008 ~]$ rm data10014ib_logfile

[falconwwwfwphpcn 211347 ~mysql]$ cp etc10013cnf etc10014cnf[falconwwwfwphpcn 211347 ~mysql]$ vi etc10014cnfserver-id = 10014另一主的连接信息

master-host=192168234140master-user=user001master-password=user001master-port=10013 此处为另一个主的端口

master-connect-retry=1 更主那更新 binlog 的时间间隔为 1 秒

auto_increment_increment=2 解决 2主在同时插入数据时的主键冲突问题

auto_increment_offset=2log-slave-updates

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (000 sec)

18

到此主主之间的复制就已经准备好了下面我们来测试一下主主之间数据的复制吧

在测试之前确保master1和master2 的 auto_increment_incrementauto_increment_offset值不能一样否则就会有主键冲突问题存在

测试开始

1先往 master1的 fwphp_data001中新建一个表

create table tb002(uid int not null auto_incrementuser varchar(20) not nullprimary key(uid))2在 master2上查看是否同步了 tb002表

[falconwwwfwphpcn 212012 ~]$ rm data10014wwwfwphpcn 删除 pid 和 err文件

[falconwwwfwphpcn 212441 ~]$ rm data10014info 删除中继日志文件

[falconwwwfwphpcn 212405 ~mysql]$ binmysql -uroot -p -S tmpmysql-10014sockmysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 | 不需要重新在此库上重建

| fwphp_data002 |

Master1mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 |+--------------------------+-------+2 rows in set (000 sec)Master2mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 || auto_increment_offset | 2 |+--------------------------+-------+2 rows in set (000 sec)

mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

11

利用 change master to 修改从上同步主的 binlog 日志文件和同步点

常见方法是在从服务器上

这样在启动从后show slave status 就可以看到

Slave_IO_State Waiting for master to send eventSlave_IO_Running YesSlave_SQL_Running Yes以上出现 slave 不能同步主的数据主要可以通过这些方法来解决

下面来测试主从数据同步

Master上

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (001 sec)mysqlgt use fwphp_data001Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt stop slaveQuery OK 0 rows affected (001 sec)mysqlgt change master to

-gt master_host=192168234140 主服务器的 IP-gt master_user=user001 复制专业帐号

-gt master_password=user001 复制专用帐号的密码

-gt master_port=10010 主服务器端口

-gt master_log_file=mysql-bin000001 主服务器的当前 binlog 日志名

-gt master_log_pos=478 binlog 日志的还原点

-gt master_connect_retry=5 连接到主服务器同步的时间间隔

mysqlgt start slaveQuery OK 0 rows affected (001 sec)

12

在从库上查看是否数据同步成功

经过以上这些测试说明MySQL的主从配置成功在这个过程中或许会出现各种各样的错

误信息不要担心只要你把握住出现错误首先看错误日志然后把出现错误的主要信息放

到网上搜索一下会有很多解决方法呈现在你的面前最好不要忘了将出现错误的症状错

mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))ERROR 1223 (HY000) Cant execute the query because you have a conflicting read lockmysqlgt 出现以上错误主要是在上面步骤五时对主库的表进行了读锁定

mysqlgt unlock tablesQuery OK 0 rows affected (000 sec)mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))Query OK 0 rows affected (001 sec)mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (000 sec)

Slave10011 和 slave10012 上

mysqlgt use fwphp_data001Database changedmysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (001 sec)

mysqlgt desc tb001+----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+----------------+| uid | int(11) | NO | PRI | NULL | auto_increment || username | varchar(20) | NO | | NULL | |+----------+-------------+------+-----+---------+----------------+2 rows in set (001 sec)

13

误代码及解决方法发到 linuxtoneorg让更多的初学者避免出现类似的错误而无法进行以下

的学习

三MySQL 主主 Replication 解析

应用场景

① 双机冗余

② 写压力比较大

③ 数据高可用性安全性较强的场合

④ 单点故障

分析说明

对于写数据量大非常大的场合单台DB已经无法满足应用的需要这时可以

横向扩展 DB应用 2 台DB做主主的 Replication减小数据的写压力同时双主

数据保证了数据的完整性和安全性避免了单点故障

实例配置

配置说明

14

主主测试主要在一台服务器上测试所以我开起了 2 实例的方式来模拟主主数据库的复

制通过以上图片可以看出主要配置

Master119216823414010013 配置文件homefalconmysqletc10013cnfMaster219216823414010014 配置文件homefalconmysqletc10014cnf

配置过程

步骤一新建 master1master2的数据目录及配置文件

步骤二设置 master1的配置文件 10013cnf

[falconwwwfwphpcn 210614 ~mysql]$ vi etc10013cnf[client]password = your_passwordport = 10013socket = tmpmysql-10013sock

[mysqld]port = 10013socket = tmpmysql-10013sockskip-lockingdatadir = homefalcondata10013key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

server-id = 10013另一主的连接信息

master-host=192168234140master-user=user001master-password=user001

[falconwwwfwphpcn 210133 ~mysql]$ cp etcmy-smallcnf etc10013cnf[falconwwwfwphpcn 210144 ~mysql]$ cd [falconwwwfwphpcn 210223 ~]$ mkdir data10013[falconwwwfwphpcn 210223 ~]$ mkdir logs 10013 logs 10014[falconwwwfwphpcn 210317 ~]$cd mysql[falconwwwfwphpcn 210317 ~mysql]$ binmysql_install_db --datadir=homefalcondata10013 初始化 10013数据目录

15

master-port=10014master-connect-retry=1需要同步 binlog 的库

binlog-do-db=fwphp_data001binlog-do-db=fwphp_data002

解决双主主键冲突问题一个主用 auto_increment_increment=1auto_increment_offset=1的话另一个

应该是 auto_increment_increment=2auto_increment_offset=1auto_increment_increment 为步长

auto_increment_offset 从多少开始

auto_increment_increment=1 解决主键冲突master2上应该都设为 2auto_increment_offset=1

解决双主之间各有从时从不能更新另一个主插入的新数据

从服务器从主服务器那更新 binlog 日志到中继日志时同时也更新也更新自己的

binlog 日志

log-slave-updates

log-bin=homefalconlogs10013mysql-binrelay-log=homefalconlogs10013www-relay-binbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10013innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10013innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but bewareof setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M

16

步骤三初始化 master1

[mysql]no-auto-rehash

[isamchk]key_buffer = 8Msort_buffer_size = 8M

[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

[falconwwwfwphpcn 211543 ~mysql]$ binmysqld_safe --defaults-file=etc10013cnf amp[falconwwwfwphpcn 211550 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010013 0000 LISTEN[falconwwwfwphpcn 211552 ~mysql]$ binmysql -uroot -p -S tmpmysql-10013sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130-log Source distributionType help or h for help Type c to clear the buffermysqlgtmysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TO

-gt user001IDENTIFIED BY user001 新建复制帐号

Query OK 0 rows affected (000 sec)mysqlgt flush privileges 权限刷新使其立即生效

Query OK 0 rows affected (000 sec)mysqlgt create database fwphp_data001Query OK 1 row affected (000 sec)mysqlgt create database fwphp_data002Query OK 1 row affected (000 sec)

17

步骤四同步骤二设置 master2的 10014cnf文件(注意端口及目录名为 10014)

步骤五新建及初始化 master2数据文件

在master1下设置只读模式锁定表的写入保持主从之间的数据一致性

Mysql gt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 212002 ~]$ cp -R data10013 data10014[falconwwwfwphpcn 212006 ~]$ ls data10014fwphp_data001 fwphp_data002 ibdata1 ib_logfile0 ib_logfile1 masterinfo mysqlrelay-loginfo test wwwfwphpcnerr wwwfwphpcnpid[falconwwwfwphpcn 212008 ~]$ rm data10014ib_logfile

[falconwwwfwphpcn 211347 ~mysql]$ cp etc10013cnf etc10014cnf[falconwwwfwphpcn 211347 ~mysql]$ vi etc10014cnfserver-id = 10014另一主的连接信息

master-host=192168234140master-user=user001master-password=user001master-port=10013 此处为另一个主的端口

master-connect-retry=1 更主那更新 binlog 的时间间隔为 1 秒

auto_increment_increment=2 解决 2主在同时插入数据时的主键冲突问题

auto_increment_offset=2log-slave-updates

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (000 sec)

18

到此主主之间的复制就已经准备好了下面我们来测试一下主主之间数据的复制吧

在测试之前确保master1和master2 的 auto_increment_incrementauto_increment_offset值不能一样否则就会有主键冲突问题存在

测试开始

1先往 master1的 fwphp_data001中新建一个表

create table tb002(uid int not null auto_incrementuser varchar(20) not nullprimary key(uid))2在 master2上查看是否同步了 tb002表

[falconwwwfwphpcn 212012 ~]$ rm data10014wwwfwphpcn 删除 pid 和 err文件

[falconwwwfwphpcn 212441 ~]$ rm data10014info 删除中继日志文件

[falconwwwfwphpcn 212405 ~mysql]$ binmysql -uroot -p -S tmpmysql-10014sockmysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 | 不需要重新在此库上重建

| fwphp_data002 |

Master1mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 |+--------------------------+-------+2 rows in set (000 sec)Master2mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 || auto_increment_offset | 2 |+--------------------------+-------+2 rows in set (000 sec)

mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

12

在从库上查看是否数据同步成功

经过以上这些测试说明MySQL的主从配置成功在这个过程中或许会出现各种各样的错

误信息不要担心只要你把握住出现错误首先看错误日志然后把出现错误的主要信息放

到网上搜索一下会有很多解决方法呈现在你的面前最好不要忘了将出现错误的症状错

mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))ERROR 1223 (HY000) Cant execute the query because you have a conflicting read lockmysqlgt 出现以上错误主要是在上面步骤五时对主库的表进行了读锁定

mysqlgt unlock tablesQuery OK 0 rows affected (000 sec)mysqlgt create table tb001(uid int not null auto_incrementusername varchar(20) notnullprimary key(uid))Query OK 0 rows affected (001 sec)mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (000 sec)

Slave10011 和 slave10012 上

mysqlgt use fwphp_data001Database changedmysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |+-------------------------+| tb001 |+-------------------------+1 row in set (001 sec)

mysqlgt desc tb001+----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+----------------+| uid | int(11) | NO | PRI | NULL | auto_increment || username | varchar(20) | NO | | NULL | |+----------+-------------+------+-----+---------+----------------+2 rows in set (001 sec)

13

误代码及解决方法发到 linuxtoneorg让更多的初学者避免出现类似的错误而无法进行以下

的学习

三MySQL 主主 Replication 解析

应用场景

① 双机冗余

② 写压力比较大

③ 数据高可用性安全性较强的场合

④ 单点故障

分析说明

对于写数据量大非常大的场合单台DB已经无法满足应用的需要这时可以

横向扩展 DB应用 2 台DB做主主的 Replication减小数据的写压力同时双主

数据保证了数据的完整性和安全性避免了单点故障

实例配置

配置说明

14

主主测试主要在一台服务器上测试所以我开起了 2 实例的方式来模拟主主数据库的复

制通过以上图片可以看出主要配置

Master119216823414010013 配置文件homefalconmysqletc10013cnfMaster219216823414010014 配置文件homefalconmysqletc10014cnf

配置过程

步骤一新建 master1master2的数据目录及配置文件

步骤二设置 master1的配置文件 10013cnf

[falconwwwfwphpcn 210614 ~mysql]$ vi etc10013cnf[client]password = your_passwordport = 10013socket = tmpmysql-10013sock

[mysqld]port = 10013socket = tmpmysql-10013sockskip-lockingdatadir = homefalcondata10013key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

server-id = 10013另一主的连接信息

master-host=192168234140master-user=user001master-password=user001

[falconwwwfwphpcn 210133 ~mysql]$ cp etcmy-smallcnf etc10013cnf[falconwwwfwphpcn 210144 ~mysql]$ cd [falconwwwfwphpcn 210223 ~]$ mkdir data10013[falconwwwfwphpcn 210223 ~]$ mkdir logs 10013 logs 10014[falconwwwfwphpcn 210317 ~]$cd mysql[falconwwwfwphpcn 210317 ~mysql]$ binmysql_install_db --datadir=homefalcondata10013 初始化 10013数据目录

15

master-port=10014master-connect-retry=1需要同步 binlog 的库

binlog-do-db=fwphp_data001binlog-do-db=fwphp_data002

解决双主主键冲突问题一个主用 auto_increment_increment=1auto_increment_offset=1的话另一个

应该是 auto_increment_increment=2auto_increment_offset=1auto_increment_increment 为步长

auto_increment_offset 从多少开始

auto_increment_increment=1 解决主键冲突master2上应该都设为 2auto_increment_offset=1

解决双主之间各有从时从不能更新另一个主插入的新数据

从服务器从主服务器那更新 binlog 日志到中继日志时同时也更新也更新自己的

binlog 日志

log-slave-updates

log-bin=homefalconlogs10013mysql-binrelay-log=homefalconlogs10013www-relay-binbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10013innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10013innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but bewareof setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M

16

步骤三初始化 master1

[mysql]no-auto-rehash

[isamchk]key_buffer = 8Msort_buffer_size = 8M

[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

[falconwwwfwphpcn 211543 ~mysql]$ binmysqld_safe --defaults-file=etc10013cnf amp[falconwwwfwphpcn 211550 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010013 0000 LISTEN[falconwwwfwphpcn 211552 ~mysql]$ binmysql -uroot -p -S tmpmysql-10013sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130-log Source distributionType help or h for help Type c to clear the buffermysqlgtmysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TO

-gt user001IDENTIFIED BY user001 新建复制帐号

Query OK 0 rows affected (000 sec)mysqlgt flush privileges 权限刷新使其立即生效

Query OK 0 rows affected (000 sec)mysqlgt create database fwphp_data001Query OK 1 row affected (000 sec)mysqlgt create database fwphp_data002Query OK 1 row affected (000 sec)

17

步骤四同步骤二设置 master2的 10014cnf文件(注意端口及目录名为 10014)

步骤五新建及初始化 master2数据文件

在master1下设置只读模式锁定表的写入保持主从之间的数据一致性

Mysql gt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 212002 ~]$ cp -R data10013 data10014[falconwwwfwphpcn 212006 ~]$ ls data10014fwphp_data001 fwphp_data002 ibdata1 ib_logfile0 ib_logfile1 masterinfo mysqlrelay-loginfo test wwwfwphpcnerr wwwfwphpcnpid[falconwwwfwphpcn 212008 ~]$ rm data10014ib_logfile

[falconwwwfwphpcn 211347 ~mysql]$ cp etc10013cnf etc10014cnf[falconwwwfwphpcn 211347 ~mysql]$ vi etc10014cnfserver-id = 10014另一主的连接信息

master-host=192168234140master-user=user001master-password=user001master-port=10013 此处为另一个主的端口

master-connect-retry=1 更主那更新 binlog 的时间间隔为 1 秒

auto_increment_increment=2 解决 2主在同时插入数据时的主键冲突问题

auto_increment_offset=2log-slave-updates

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (000 sec)

18

到此主主之间的复制就已经准备好了下面我们来测试一下主主之间数据的复制吧

在测试之前确保master1和master2 的 auto_increment_incrementauto_increment_offset值不能一样否则就会有主键冲突问题存在

测试开始

1先往 master1的 fwphp_data001中新建一个表

create table tb002(uid int not null auto_incrementuser varchar(20) not nullprimary key(uid))2在 master2上查看是否同步了 tb002表

[falconwwwfwphpcn 212012 ~]$ rm data10014wwwfwphpcn 删除 pid 和 err文件

[falconwwwfwphpcn 212441 ~]$ rm data10014info 删除中继日志文件

[falconwwwfwphpcn 212405 ~mysql]$ binmysql -uroot -p -S tmpmysql-10014sockmysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 | 不需要重新在此库上重建

| fwphp_data002 |

Master1mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 |+--------------------------+-------+2 rows in set (000 sec)Master2mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 || auto_increment_offset | 2 |+--------------------------+-------+2 rows in set (000 sec)

mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

13

误代码及解决方法发到 linuxtoneorg让更多的初学者避免出现类似的错误而无法进行以下

的学习

三MySQL 主主 Replication 解析

应用场景

① 双机冗余

② 写压力比较大

③ 数据高可用性安全性较强的场合

④ 单点故障

分析说明

对于写数据量大非常大的场合单台DB已经无法满足应用的需要这时可以

横向扩展 DB应用 2 台DB做主主的 Replication减小数据的写压力同时双主

数据保证了数据的完整性和安全性避免了单点故障

实例配置

配置说明

14

主主测试主要在一台服务器上测试所以我开起了 2 实例的方式来模拟主主数据库的复

制通过以上图片可以看出主要配置

Master119216823414010013 配置文件homefalconmysqletc10013cnfMaster219216823414010014 配置文件homefalconmysqletc10014cnf

配置过程

步骤一新建 master1master2的数据目录及配置文件

步骤二设置 master1的配置文件 10013cnf

[falconwwwfwphpcn 210614 ~mysql]$ vi etc10013cnf[client]password = your_passwordport = 10013socket = tmpmysql-10013sock

[mysqld]port = 10013socket = tmpmysql-10013sockskip-lockingdatadir = homefalcondata10013key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

server-id = 10013另一主的连接信息

master-host=192168234140master-user=user001master-password=user001

[falconwwwfwphpcn 210133 ~mysql]$ cp etcmy-smallcnf etc10013cnf[falconwwwfwphpcn 210144 ~mysql]$ cd [falconwwwfwphpcn 210223 ~]$ mkdir data10013[falconwwwfwphpcn 210223 ~]$ mkdir logs 10013 logs 10014[falconwwwfwphpcn 210317 ~]$cd mysql[falconwwwfwphpcn 210317 ~mysql]$ binmysql_install_db --datadir=homefalcondata10013 初始化 10013数据目录

15

master-port=10014master-connect-retry=1需要同步 binlog 的库

binlog-do-db=fwphp_data001binlog-do-db=fwphp_data002

解决双主主键冲突问题一个主用 auto_increment_increment=1auto_increment_offset=1的话另一个

应该是 auto_increment_increment=2auto_increment_offset=1auto_increment_increment 为步长

auto_increment_offset 从多少开始

auto_increment_increment=1 解决主键冲突master2上应该都设为 2auto_increment_offset=1

解决双主之间各有从时从不能更新另一个主插入的新数据

从服务器从主服务器那更新 binlog 日志到中继日志时同时也更新也更新自己的

binlog 日志

log-slave-updates

log-bin=homefalconlogs10013mysql-binrelay-log=homefalconlogs10013www-relay-binbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10013innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10013innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but bewareof setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M

16

步骤三初始化 master1

[mysql]no-auto-rehash

[isamchk]key_buffer = 8Msort_buffer_size = 8M

[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

[falconwwwfwphpcn 211543 ~mysql]$ binmysqld_safe --defaults-file=etc10013cnf amp[falconwwwfwphpcn 211550 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010013 0000 LISTEN[falconwwwfwphpcn 211552 ~mysql]$ binmysql -uroot -p -S tmpmysql-10013sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130-log Source distributionType help or h for help Type c to clear the buffermysqlgtmysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TO

-gt user001IDENTIFIED BY user001 新建复制帐号

Query OK 0 rows affected (000 sec)mysqlgt flush privileges 权限刷新使其立即生效

Query OK 0 rows affected (000 sec)mysqlgt create database fwphp_data001Query OK 1 row affected (000 sec)mysqlgt create database fwphp_data002Query OK 1 row affected (000 sec)

17

步骤四同步骤二设置 master2的 10014cnf文件(注意端口及目录名为 10014)

步骤五新建及初始化 master2数据文件

在master1下设置只读模式锁定表的写入保持主从之间的数据一致性

Mysql gt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 212002 ~]$ cp -R data10013 data10014[falconwwwfwphpcn 212006 ~]$ ls data10014fwphp_data001 fwphp_data002 ibdata1 ib_logfile0 ib_logfile1 masterinfo mysqlrelay-loginfo test wwwfwphpcnerr wwwfwphpcnpid[falconwwwfwphpcn 212008 ~]$ rm data10014ib_logfile

[falconwwwfwphpcn 211347 ~mysql]$ cp etc10013cnf etc10014cnf[falconwwwfwphpcn 211347 ~mysql]$ vi etc10014cnfserver-id = 10014另一主的连接信息

master-host=192168234140master-user=user001master-password=user001master-port=10013 此处为另一个主的端口

master-connect-retry=1 更主那更新 binlog 的时间间隔为 1 秒

auto_increment_increment=2 解决 2主在同时插入数据时的主键冲突问题

auto_increment_offset=2log-slave-updates

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (000 sec)

18

到此主主之间的复制就已经准备好了下面我们来测试一下主主之间数据的复制吧

在测试之前确保master1和master2 的 auto_increment_incrementauto_increment_offset值不能一样否则就会有主键冲突问题存在

测试开始

1先往 master1的 fwphp_data001中新建一个表

create table tb002(uid int not null auto_incrementuser varchar(20) not nullprimary key(uid))2在 master2上查看是否同步了 tb002表

[falconwwwfwphpcn 212012 ~]$ rm data10014wwwfwphpcn 删除 pid 和 err文件

[falconwwwfwphpcn 212441 ~]$ rm data10014info 删除中继日志文件

[falconwwwfwphpcn 212405 ~mysql]$ binmysql -uroot -p -S tmpmysql-10014sockmysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 | 不需要重新在此库上重建

| fwphp_data002 |

Master1mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 |+--------------------------+-------+2 rows in set (000 sec)Master2mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 || auto_increment_offset | 2 |+--------------------------+-------+2 rows in set (000 sec)

mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

14

主主测试主要在一台服务器上测试所以我开起了 2 实例的方式来模拟主主数据库的复

制通过以上图片可以看出主要配置

Master119216823414010013 配置文件homefalconmysqletc10013cnfMaster219216823414010014 配置文件homefalconmysqletc10014cnf

配置过程

步骤一新建 master1master2的数据目录及配置文件

步骤二设置 master1的配置文件 10013cnf

[falconwwwfwphpcn 210614 ~mysql]$ vi etc10013cnf[client]password = your_passwordport = 10013socket = tmpmysql-10013sock

[mysqld]port = 10013socket = tmpmysql-10013sockskip-lockingdatadir = homefalcondata10013key_buffer = 16Kmax_allowed_packet = 1Mtable_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 64K

server-id = 10013另一主的连接信息

master-host=192168234140master-user=user001master-password=user001

[falconwwwfwphpcn 210133 ~mysql]$ cp etcmy-smallcnf etc10013cnf[falconwwwfwphpcn 210144 ~mysql]$ cd [falconwwwfwphpcn 210223 ~]$ mkdir data10013[falconwwwfwphpcn 210223 ~]$ mkdir logs 10013 logs 10014[falconwwwfwphpcn 210317 ~]$cd mysql[falconwwwfwphpcn 210317 ~mysql]$ binmysql_install_db --datadir=homefalcondata10013 初始化 10013数据目录

15

master-port=10014master-connect-retry=1需要同步 binlog 的库

binlog-do-db=fwphp_data001binlog-do-db=fwphp_data002

解决双主主键冲突问题一个主用 auto_increment_increment=1auto_increment_offset=1的话另一个

应该是 auto_increment_increment=2auto_increment_offset=1auto_increment_increment 为步长

auto_increment_offset 从多少开始

auto_increment_increment=1 解决主键冲突master2上应该都设为 2auto_increment_offset=1

解决双主之间各有从时从不能更新另一个主插入的新数据

从服务器从主服务器那更新 binlog 日志到中继日志时同时也更新也更新自己的

binlog 日志

log-slave-updates

log-bin=homefalconlogs10013mysql-binrelay-log=homefalconlogs10013www-relay-binbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10013innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10013innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but bewareof setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M

16

步骤三初始化 master1

[mysql]no-auto-rehash

[isamchk]key_buffer = 8Msort_buffer_size = 8M

[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

[falconwwwfwphpcn 211543 ~mysql]$ binmysqld_safe --defaults-file=etc10013cnf amp[falconwwwfwphpcn 211550 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010013 0000 LISTEN[falconwwwfwphpcn 211552 ~mysql]$ binmysql -uroot -p -S tmpmysql-10013sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130-log Source distributionType help or h for help Type c to clear the buffermysqlgtmysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TO

-gt user001IDENTIFIED BY user001 新建复制帐号

Query OK 0 rows affected (000 sec)mysqlgt flush privileges 权限刷新使其立即生效

Query OK 0 rows affected (000 sec)mysqlgt create database fwphp_data001Query OK 1 row affected (000 sec)mysqlgt create database fwphp_data002Query OK 1 row affected (000 sec)

17

步骤四同步骤二设置 master2的 10014cnf文件(注意端口及目录名为 10014)

步骤五新建及初始化 master2数据文件

在master1下设置只读模式锁定表的写入保持主从之间的数据一致性

Mysql gt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 212002 ~]$ cp -R data10013 data10014[falconwwwfwphpcn 212006 ~]$ ls data10014fwphp_data001 fwphp_data002 ibdata1 ib_logfile0 ib_logfile1 masterinfo mysqlrelay-loginfo test wwwfwphpcnerr wwwfwphpcnpid[falconwwwfwphpcn 212008 ~]$ rm data10014ib_logfile

[falconwwwfwphpcn 211347 ~mysql]$ cp etc10013cnf etc10014cnf[falconwwwfwphpcn 211347 ~mysql]$ vi etc10014cnfserver-id = 10014另一主的连接信息

master-host=192168234140master-user=user001master-password=user001master-port=10013 此处为另一个主的端口

master-connect-retry=1 更主那更新 binlog 的时间间隔为 1 秒

auto_increment_increment=2 解决 2主在同时插入数据时的主键冲突问题

auto_increment_offset=2log-slave-updates

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (000 sec)

18

到此主主之间的复制就已经准备好了下面我们来测试一下主主之间数据的复制吧

在测试之前确保master1和master2 的 auto_increment_incrementauto_increment_offset值不能一样否则就会有主键冲突问题存在

测试开始

1先往 master1的 fwphp_data001中新建一个表

create table tb002(uid int not null auto_incrementuser varchar(20) not nullprimary key(uid))2在 master2上查看是否同步了 tb002表

[falconwwwfwphpcn 212012 ~]$ rm data10014wwwfwphpcn 删除 pid 和 err文件

[falconwwwfwphpcn 212441 ~]$ rm data10014info 删除中继日志文件

[falconwwwfwphpcn 212405 ~mysql]$ binmysql -uroot -p -S tmpmysql-10014sockmysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 | 不需要重新在此库上重建

| fwphp_data002 |

Master1mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 |+--------------------------+-------+2 rows in set (000 sec)Master2mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 || auto_increment_offset | 2 |+--------------------------+-------+2 rows in set (000 sec)

mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

15

master-port=10014master-connect-retry=1需要同步 binlog 的库

binlog-do-db=fwphp_data001binlog-do-db=fwphp_data002

解决双主主键冲突问题一个主用 auto_increment_increment=1auto_increment_offset=1的话另一个

应该是 auto_increment_increment=2auto_increment_offset=1auto_increment_increment 为步长

auto_increment_offset 从多少开始

auto_increment_increment=1 解决主键冲突master2上应该都设为 2auto_increment_offset=1

解决双主之间各有从时从不能更新另一个主插入的新数据

从服务器从主服务器那更新 binlog 日志到中继日志时同时也更新也更新自己的

binlog 日志

log-slave-updates

log-bin=homefalconlogs10013mysql-binrelay-log=homefalconlogs10013www-relay-binbinlog_format=mixeddefault-storage-engine = innodb Uncomment the following if you are using InnoDB tablesinnodb_data_home_dir = homefalcondata10013innodb_data_file_path = ibdata110Mautoextendinnodb_log_group_home_dir = homefalcondata10013innodb_log_arch_dir = homefalconmysqlvar You can set _buffer_pool_size up to 50 - 80 of RAM but bewareof setting memory usage too highinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M Set _log_file_size to 25 of buffer pool sizeinnodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50

[mysqldump]quickmax_allowed_packet = 16M

16

步骤三初始化 master1

[mysql]no-auto-rehash

[isamchk]key_buffer = 8Msort_buffer_size = 8M

[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

[falconwwwfwphpcn 211543 ~mysql]$ binmysqld_safe --defaults-file=etc10013cnf amp[falconwwwfwphpcn 211550 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010013 0000 LISTEN[falconwwwfwphpcn 211552 ~mysql]$ binmysql -uroot -p -S tmpmysql-10013sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130-log Source distributionType help or h for help Type c to clear the buffermysqlgtmysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TO

-gt user001IDENTIFIED BY user001 新建复制帐号

Query OK 0 rows affected (000 sec)mysqlgt flush privileges 权限刷新使其立即生效

Query OK 0 rows affected (000 sec)mysqlgt create database fwphp_data001Query OK 1 row affected (000 sec)mysqlgt create database fwphp_data002Query OK 1 row affected (000 sec)

17

步骤四同步骤二设置 master2的 10014cnf文件(注意端口及目录名为 10014)

步骤五新建及初始化 master2数据文件

在master1下设置只读模式锁定表的写入保持主从之间的数据一致性

Mysql gt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 212002 ~]$ cp -R data10013 data10014[falconwwwfwphpcn 212006 ~]$ ls data10014fwphp_data001 fwphp_data002 ibdata1 ib_logfile0 ib_logfile1 masterinfo mysqlrelay-loginfo test wwwfwphpcnerr wwwfwphpcnpid[falconwwwfwphpcn 212008 ~]$ rm data10014ib_logfile

[falconwwwfwphpcn 211347 ~mysql]$ cp etc10013cnf etc10014cnf[falconwwwfwphpcn 211347 ~mysql]$ vi etc10014cnfserver-id = 10014另一主的连接信息

master-host=192168234140master-user=user001master-password=user001master-port=10013 此处为另一个主的端口

master-connect-retry=1 更主那更新 binlog 的时间间隔为 1 秒

auto_increment_increment=2 解决 2主在同时插入数据时的主键冲突问题

auto_increment_offset=2log-slave-updates

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (000 sec)

18

到此主主之间的复制就已经准备好了下面我们来测试一下主主之间数据的复制吧

在测试之前确保master1和master2 的 auto_increment_incrementauto_increment_offset值不能一样否则就会有主键冲突问题存在

测试开始

1先往 master1的 fwphp_data001中新建一个表

create table tb002(uid int not null auto_incrementuser varchar(20) not nullprimary key(uid))2在 master2上查看是否同步了 tb002表

[falconwwwfwphpcn 212012 ~]$ rm data10014wwwfwphpcn 删除 pid 和 err文件

[falconwwwfwphpcn 212441 ~]$ rm data10014info 删除中继日志文件

[falconwwwfwphpcn 212405 ~mysql]$ binmysql -uroot -p -S tmpmysql-10014sockmysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 | 不需要重新在此库上重建

| fwphp_data002 |

Master1mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 |+--------------------------+-------+2 rows in set (000 sec)Master2mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 || auto_increment_offset | 2 |+--------------------------+-------+2 rows in set (000 sec)

mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

16

步骤三初始化 master1

[mysql]no-auto-rehash

[isamchk]key_buffer = 8Msort_buffer_size = 8M

[myisamchk]key_buffer = 8Msort_buffer_size = 8M

[mysqlhotcopy]interactive-timeout

[falconwwwfwphpcn 211543 ~mysql]$ binmysqld_safe --defaults-file=etc10013cnf amp[falconwwwfwphpcn 211550 ~mysql]$ netstat -an -tActive Internet connections (servers and established)Proto Recv-Q Send-Q LocalAddress Foreign Address Statetcp 0 0 000022 0000 LISTENtcp 0 0 000010013 0000 LISTEN[falconwwwfwphpcn 211552 ~mysql]$ binmysql -uroot -p -S tmpmysql-10013sockEnter passwordWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130-log Source distributionType help or h for help Type c to clear the buffermysqlgtmysqlgt GRANT REPLICATION SLAVEReplication ClientRELOADSUPER ON TO

-gt user001IDENTIFIED BY user001 新建复制帐号

Query OK 0 rows affected (000 sec)mysqlgt flush privileges 权限刷新使其立即生效

Query OK 0 rows affected (000 sec)mysqlgt create database fwphp_data001Query OK 1 row affected (000 sec)mysqlgt create database fwphp_data002Query OK 1 row affected (000 sec)

17

步骤四同步骤二设置 master2的 10014cnf文件(注意端口及目录名为 10014)

步骤五新建及初始化 master2数据文件

在master1下设置只读模式锁定表的写入保持主从之间的数据一致性

Mysql gt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 212002 ~]$ cp -R data10013 data10014[falconwwwfwphpcn 212006 ~]$ ls data10014fwphp_data001 fwphp_data002 ibdata1 ib_logfile0 ib_logfile1 masterinfo mysqlrelay-loginfo test wwwfwphpcnerr wwwfwphpcnpid[falconwwwfwphpcn 212008 ~]$ rm data10014ib_logfile

[falconwwwfwphpcn 211347 ~mysql]$ cp etc10013cnf etc10014cnf[falconwwwfwphpcn 211347 ~mysql]$ vi etc10014cnfserver-id = 10014另一主的连接信息

master-host=192168234140master-user=user001master-password=user001master-port=10013 此处为另一个主的端口

master-connect-retry=1 更主那更新 binlog 的时间间隔为 1 秒

auto_increment_increment=2 解决 2主在同时插入数据时的主键冲突问题

auto_increment_offset=2log-slave-updates

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (000 sec)

18

到此主主之间的复制就已经准备好了下面我们来测试一下主主之间数据的复制吧

在测试之前确保master1和master2 的 auto_increment_incrementauto_increment_offset值不能一样否则就会有主键冲突问题存在

测试开始

1先往 master1的 fwphp_data001中新建一个表

create table tb002(uid int not null auto_incrementuser varchar(20) not nullprimary key(uid))2在 master2上查看是否同步了 tb002表

[falconwwwfwphpcn 212012 ~]$ rm data10014wwwfwphpcn 删除 pid 和 err文件

[falconwwwfwphpcn 212441 ~]$ rm data10014info 删除中继日志文件

[falconwwwfwphpcn 212405 ~mysql]$ binmysql -uroot -p -S tmpmysql-10014sockmysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 | 不需要重新在此库上重建

| fwphp_data002 |

Master1mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 |+--------------------------+-------+2 rows in set (000 sec)Master2mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 || auto_increment_offset | 2 |+--------------------------+-------+2 rows in set (000 sec)

mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

17

步骤四同步骤二设置 master2的 10014cnf文件(注意端口及目录名为 10014)

步骤五新建及初始化 master2数据文件

在master1下设置只读模式锁定表的写入保持主从之间的数据一致性

Mysql gt flush tables with read lockQuery OK 0 rows affected (000 sec)

[falconwwwfwphpcn 212002 ~]$ cp -R data10013 data10014[falconwwwfwphpcn 212006 ~]$ ls data10014fwphp_data001 fwphp_data002 ibdata1 ib_logfile0 ib_logfile1 masterinfo mysqlrelay-loginfo test wwwfwphpcnerr wwwfwphpcnpid[falconwwwfwphpcn 212008 ~]$ rm data10014ib_logfile

[falconwwwfwphpcn 211347 ~mysql]$ cp etc10013cnf etc10014cnf[falconwwwfwphpcn 211347 ~mysql]$ vi etc10014cnfserver-id = 10014另一主的连接信息

master-host=192168234140master-user=user001master-password=user001master-port=10013 此处为另一个主的端口

master-connect-retry=1 更主那更新 binlog 的时间间隔为 1 秒

auto_increment_increment=2 解决 2主在同时插入数据时的主键冲突问题

auto_increment_offset=2log-slave-updates

mysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 || fwphp_data002 || mysql || test |+--------------------+5 rows in set (000 sec)

18

到此主主之间的复制就已经准备好了下面我们来测试一下主主之间数据的复制吧

在测试之前确保master1和master2 的 auto_increment_incrementauto_increment_offset值不能一样否则就会有主键冲突问题存在

测试开始

1先往 master1的 fwphp_data001中新建一个表

create table tb002(uid int not null auto_incrementuser varchar(20) not nullprimary key(uid))2在 master2上查看是否同步了 tb002表

[falconwwwfwphpcn 212012 ~]$ rm data10014wwwfwphpcn 删除 pid 和 err文件

[falconwwwfwphpcn 212441 ~]$ rm data10014info 删除中继日志文件

[falconwwwfwphpcn 212405 ~mysql]$ binmysql -uroot -p -S tmpmysql-10014sockmysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 | 不需要重新在此库上重建

| fwphp_data002 |

Master1mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 |+--------------------------+-------+2 rows in set (000 sec)Master2mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 || auto_increment_offset | 2 |+--------------------------+-------+2 rows in set (000 sec)

mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

18

到此主主之间的复制就已经准备好了下面我们来测试一下主主之间数据的复制吧

在测试之前确保master1和master2 的 auto_increment_incrementauto_increment_offset值不能一样否则就会有主键冲突问题存在

测试开始

1先往 master1的 fwphp_data001中新建一个表

create table tb002(uid int not null auto_incrementuser varchar(20) not nullprimary key(uid))2在 master2上查看是否同步了 tb002表

[falconwwwfwphpcn 212012 ~]$ rm data10014wwwfwphpcn 删除 pid 和 err文件

[falconwwwfwphpcn 212441 ~]$ rm data10014info 删除中继日志文件

[falconwwwfwphpcn 212405 ~mysql]$ binmysql -uroot -p -S tmpmysql-10014sockmysqlgt show databases+--------------------+| Database |+--------------------+| information_schema || fwphp_data001 | 不需要重新在此库上重建

| fwphp_data002 |

Master1mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 |+--------------------------+-------+2 rows in set (000 sec)Master2mysqlgt show variables like auto_incr+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 2 || auto_increment_offset | 2 |+--------------------------+-------+2 rows in set (000 sec)

mysqlgt show tables+-------------------------+| Tables_in_fwphp_data001 |

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

19

3在 master2的 fwphp_data001库的 tb002表中插入一条记录

insert into tb002 set user=FalconC4在 master1的 fwphp_data001中查看是否表中有数据

5最后可以写一个测试程序来大批量的插入和读取数据看是否稳定可靠同时也可以

用 mysqlslap 来给 MySQL做压力测试压力测试后面的一节来专门讲解

+-------------------------+| tb002 |+-------------------------+1 row in set (000 sec)

mysqlgt select from tb002+-----+----------+| uid | user |+-----+----------+| 2 | FalconC | 由于master2的自增字段是从 2个开始自增 2所以 uid 为 2+-----+----------+1 rows in set (000 sec)

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

20

四MySQL 两主多从 Replication 解析

应用场景

① 数据量非常大主从和主主复制 Replication 已经无法满足应用的需求

② 需要数据完整性和高可靠性即使有 DB宕机也不影响正常的业务

分析说明

采用 2主多从的复制 Replication 主要是给主DB做了冗余即当主 DB发生意

外宕机另一主也可提供正常访问当问题修复后即可立即恢复正常工作对业务

的影响不大同时在两主上相应的挂一些从DB主要为高并发的读服务然而这

个地方应该采用 keepalived 来设置一个VIP来作为从 DB的复制 IP保证从DB的

可靠性

实例配置

主要配置说明

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

21

Master119216823414010000 10000cnfMaster219216823414010001 10001cnfSlave1 19216823414010002 10002cnfSlave2 19216823414010003 10003cnf

配置流程同主主主从Replication 的相同只是从库分别指向各自的主库来更新 binlog

此处也可以使用 keepalived 和 lvs 来实现高可用高效率的 DB集群 Replication具体

实现步骤可以参考 keepalived 和 lvs 的介绍

五MySQL Cluster集群 Replication

应用场景

MySQL Cluster应用于分布式计算的环境

分析说明

MySQL Cluster 主要是通过 MySQL 的 NDB引擎实现的一个分布式的内存型

数据库集群主要有数据节点(数据存储)SQL节点(SQL语句解析)管理节

点(用户对数据节点SQL节点管理之用)组成mysql5130 的 ndb目前只支持

和复制 ndb的引擎的数据库不支持 innodb 和myisamMySQL Cluster70 以后的

版本支持 InnoDB和 MyISAM引擎

实例配置

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

22

服务环境CentOS52CentOS52CentOS52CentOS52 ++++MySQL5130MySQL5130MySQL5130MySQL5130 配置步骤

管理节点1921682341363310

数据节点 11921682341363311数据节点 21921682341363312

SQL节点 11921682341363313SQL节点 21921682341363314

MYSQL 安装路径 homefalconmysql数据存放路径 homefalcondata

准备工作

源码安装 MySQL

[falconfwphpcn 123218 ~src]$ mkdir homefalcondatadata-3310 data-3311 data-3312data-3313 data-3314 log 新建各节点的数据目录

[falconfwphpcn 123223 ~data]$ lsdata-3310 data-3311 data-3312 data-3313 data-3314 log

[falconfwphpcn 123228 ~src]$ tar xvzf mysql-5130targz[falconfwphpcn 123228 ~src]$ cd mysql-5130[falconfwphpcn 123229 ~srcmysql-5130]$ configure --prefix=homefalconmysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=utf8 --with-extra-charsets=complex --with-server-suffix=-max --with-pthread --with-unix-socket-path=homefalconmysqllogmysqlsock --with-mysqld-user=mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-big-tables --with-plugins=max

[falconfwphpcn 125229 ~srcmysql-5130]$ make -j 9 ampamp make install[falconfwphpcn 132238 ~src]$ mkdir mysqletc

[falconfwphpcn 133239 ~srcmysql-5130]$ cp support-filescnf mysqletc[falconfwphpcn 133240 ~src]$ cd mysql

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

23

初始化各节点数据文件

初始化各节点配置文件

依次修改 ndb-3310ndb-3311sql-3312sql-3313的配置文件(修改相应的端口号和数据目录路

径并添加 ndbcluster项到mysqld 中)

主要修改参数

最后来配置 ndb_mgmd的 configini 文件

[client]port = 3313socket = tmpmysql-3313sock

[mysqld]port = 3313socket = tmpmysql-3313sockdatadir = homefalcondatadata-3313Ndbcluster 默认开启NDB 引擎

[mysql_cluster]ndb-connectstring=192168234136 管理节点地址

[falconfwphpcn 134156 ~mysql]$binmysql_install_db --datadir=homefalcondatadata-3310[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3311[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3312[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3313[falconfwphpcn 134156 ~mysql]$ binmysql_install_db --datadir=homefalcondatadata-3314

[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3310cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcndb-3311cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3312cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3313cnf[falconfwphpcn 134238 ~mysql]$ cp etcmy-smallcnf etcsql-3314cnf

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

24

到此 cluster集群配置全部结束现在来测试是否配置成功吧

启动顺序是管理节点-gt数据节点-gtSQL节点

关闭顺序是SQL节点-gt数据节点-gt管理节点

启动管理节点

最后来配置 configini文件

[falconfwphpcn 135103 ~mysql]$ vi etcconfigini[NDBD DEFAULT]NoOfReplicas=2DataMemory=20MIndexMemory=10M

[TCP DEFAULT]portnumber=3000 本端口主要用于管理节点数据节点SQL节点之间通讯之用

[NDB_MGMD]id=1hostname=192168234136datadir=homefalcondatadata-3310

[NDBD]id=2hostname=192168234136datadir=homefalcondatadata-3311

[NDBD]id=3hostname=192168234136datadir=homefalcondatadata-3312

[mysqld]id=4hostname=192168234136

[mysqld]id=5hostname=192168234136

[falconfwphpcn 135238 ~mysql]$ libexecndb_mgmd -f etcconfigini

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

25

测试管理节点是否正常运行(NDB节点和 SQL节点没有启动)

启动数据节点

如果在第一次启动数据节点时需要加入--initial 参数初始化数据节点主要是清空数据节

点文件系统(数据节点已存储数据时慎用)

查看数据节点启动情况(现在只有 SQL节点没有启动了)

ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130)id=3 192168234136 (Version 5130)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

[falconfwphpcn 135338 ~mysql]$ libexecndbd --defaults-file=etcndb-3311cnf[falconfwphpcn 135339 ~mysql]$ libexecndbd --defaults-file=etcndb-3312cnf

[falconfwphpcn 135241 ~mysql]$ binndb_mgm-- NDB Cluster -- Management Client --ndb_mgmgt showConnected to Management Server at localhost1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 (not connected accepting connect from 192168234136)id=3 (not connected accepting connect from 192168234136)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 (not connected accepting connect from 192168234136)id=5 (not connected accepting connect from 192168234136)

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

26

最后启动 SQL节点

查看整个集群启动情况

到此时整个 MYSQL-CLUSTER集群启动完成测试集群是否正常运行

随便登录一个 SQL节点 3313

[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3313cnf amp[falconfwphpcn 135441 ~mysql]$ binmysqld_safe --defaults-file=etcsql-3314cnf amp

[falconfwphpcn 135501 ~mysql]$ binmysql -uroot -S tmpmysql-3313sockWelcome to the MySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffer

mysqlgtmysqlgt use testDatabase changedmysqlgt show tablesEmpty set (000 sec)

mysqlgt create table ndb_test(id int not null auto_increment primary keyusername varchar(20)not nullpasswd varchar(20) not null ) engine=ndb 此处指定表的引擎类型为 NDBQuery OK 0 rows affected (091 sec) 否则数据同步将无法在进行

ndb_mgmgt showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 192168234136 (Version 5130 Nodegroup 0 Master)id=3 192168234136 (Version 5130 starting Nodegroup 0)

[ndb_mgmd(MGM)] 1 node(s)id=1 192168234136 (Version 5130)

[mysqld(API)] 2 node(s)id=4 192168234136 (Version 5130)id=5 192168234136 (Version 5130)

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

27

切换到另一个 SQL节点 3314

[falconfwphpcn 140219 ~mysql]$ binmysql -uroot -S tmpmysql-3314sockWelcome to theMySQL monitor Commands end with or gYourMySQL connection id is 3Server version 5130fwphp-cn-log Source distribution

Type help or h for help Type c to clear the buffermysqlgt use testmysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (005 sec)

mysqlgt show tables+----------------+| Tables_in_test |+----------------+| ndb_test |+----------------+1 row in set (001 sec)

mysqlgt insert into ndb_test set username=falconpasswd=123456Query OK 1 row affected 1 warning (004 sec)

mysqlgt select from ndb_test+----+----------+--------+| id | username | passwd |+----+----------+--------+| 1 | falcon | 123456 |+----+----------+--------+1 row in set (000 sec)

mysqlgt

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

28

最后单点故障可以自行测试随便 down掉一个 SQL节点或数据节点或一个数据节点和

一个 SQL节点 mysql 都成正常运行必须保证有一个数据节点和一个 SQL节点就能够正常

提供服务这个可以去自行测试

在配置文件 configini 中管理节点和数据节点的配置参数还有很多有兴趣的可以研究一下

管理 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-mgm-definitionhtml

数 据 节 点 的 配 置 参 数 httpdevmysqlcomdocrefman51enmysql-cluster-ndbd-definitionhtml

六MySQL数据备份和恢复

MysqldumpMysqldumpMysqldumpMysqldumpmysql 自带的备份恢复工具可以对数据库表结构和数据分别进

行备份和恢复

例如

备份

Mysqldump -uroot -p -h localhost -P 3306 dbname gt homefalconbakdbname-3306sql

恢复

Mysqlgtsource homefalconbakdbname-3306sql

TarTarTarTar在将整库执行读锁定的情况下对整个库文件打包

备份

Mysqlgtflush tables with read lock$tar cvzf 3306-20091226targz homefalcondata3306Mysqlgtunlock tables恢复

Mysqlgtflush tables with read lock$tar xvzf 3306-20091226targzMysqlgtunlock tables

MysqlbinlogMysqlbinlogMysqlbinlogMysqlbinlog利用二进制日志来恢复被删除的数据

例如

binmysqlbinlog -d test --start-datetime=2009-10-17 110050 --stop-datetime=2009-10-17 111850 data000mysql-bin000002 |binmysql -uroot -S

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

29

tmpmysql-10000sock恢复数据库 test中从 2009-10-17 110050 到 2009-10-17 111850 之间的数据

innobackupexinnobackupexinnobackupexinnobackupex

七性能分析及优化

① 硬件CPU(多核64 位)内存磁盘(SCSISSD)② 软件Linux2630 (64位或 32位)

③ 文件系统xfsext4ext3reiserfsjfs等MySQL参数

变量名 默认值 描叙

auto_increment_increment 1 主键自增步长

auto_increment_offset 1 主键自增起始值

autocommit ON 事务是否自动提交

automatic_sp_privileges ON 自动执行权限相关操作

back_log 50 设定缓存的队列数节省连接时

的开销

basedir homefalconmysql MySQL安装目录

big_tables OFF 支持大数据量的表

binlog_cache_size 32768 二进制日志缓存大小

binlog_format MIXED 二进制的格式( STATEMENT

ROWMIXED)

bulk_insert_buffer_size 8388608 每线程的字节数限制缓存树的

大小0 为禁止

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 homefalconmysqlsharemysqlcharsets

字符集目录

collation_connection utf8_general_ci 连接字符集的校对规则

collation_database utf8_general_ci 默认数据库使用的校对规则

collation_server utf8_general_ci 服务器的默认校对规则

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

30

completion_type 0 事务结束类型 (012)

concurrent_insert 1 并发插入(012)

connect_timeout 10 连接超时

datadir homefalcondata10013

数据文件所放置的目录

date_format Y-m-d 日期格式

datetime_format Y-m-dHis

default_week_format 0

delay_key_write ON 键的延迟写入

delayed_insert_limit 100 延迟键插入数限制

delayed_insert_timeout 300 延迟键插入超时时间

delayed_queue_size 1000 延迟队列大小

div_precision_increment 4

engine_condition_pushdown ON

error_count 0 错误计数器

event_scheduler OFF 事件计划

expire_logs_days 0 日志过期天数

flush OFF 是否强制刷新

flush_time 0 强制刷新时间间隔

foreign_key_checks ON 外键检查

ft_boolean_syntax + -gtlt()~amp 布尔全文搜索支持的操作符系

ft_max_word_len 84 全文搜索关键字的最大长度

ft_min_word_len 4 全文搜索关键字的最大长度

ft_query_expansion_limit 20 使 用 WITH QUERYEXPANSION 进行全文搜索的最

大匹配数

ft_stopword_file (built-in) 读取全文搜索的停止字清单的

文件

general_log OFF 是否开启常用日志

general_log_file homefalcondata10013wwwlog

常用日志文件目录记录每一个

事务

group_concat_max_len 1024

have_community_features YES

have_compress YES 是否 zlib 压缩库适合该服务器

have_crypt YES 是否 crypt()系统调用适合该服务

have_csv YES 是否支持归档

have_dynamic_load ing NO

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

31

have_geometry YES 服务器是否支持空间数据类型

have_innodb YES 是否支持 innodb引擎

have_ndbcluster NO 是否开启 ndb引擎

have_openssl NO 是否开启 openssl连接

have_partitioning YES 是否支持分表

have_query_cache YES 是否支持查询缓存

have_rtree_keys YES RTREE索引是否可用

have_ssl NO

have_symlink YES 是否启用符号链接支持

hostname wwwfwphpcn MySQL服务器的主机名

identity 0 于 last_insert_id 一样

init_connect 服务器为每个连接的客户端执

行的字符串

init_file 启动服务器时用--init-file 选项指

定的文件名

init_slave 每次 SQL线程启动时从服务器

应执行该字符串

innodb_adaptive_hash_index ON 利用合适的 hash索引

innodb_additional_mem_pool_siz

2097152 Innodb付属内存池存放表结构

及索引结构等信息

innodb_autoextend_increment 8 表空间被填满后自动增加的大

小默认为 8Minnodb_autoinc_lock_mode 1

innodb_buffer_pool_size 16777216 InnoDB缓存池大小

innodb_checksums ON InnoDB在所有对磁盘的页面读

取上使用校验和验证以确保额

外容错防止硬件损坏或数据文

innodb_commit_concurrency 0 同时提交的事务数

innodb_concurrency_tickets 500

innodb_data_file_path ibdata110Mautoextend

数据文件的名字及数据文件的

自增大小

innodb_data_home_dir homefalcondata10013

InnoDB数据文件的目录

innodb_doublewrite ON 默认地 InnoDB 存储所有数据

两次第一次存储到 doublewrite缓冲然后存储到确实的数据文

innodb_fast_shutdown 1 如果你把这个参数设置为 0InnoDB在关闭之前做一个完全

净化和一个插入缓冲合并设置

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

32

为 1则跳过这些操作如果你设

置这个值为 2 (在 Netware 无此

值) InnoDB将刷新它的日志然

后冷关机仿佛 MySQL 崩溃一

样已提交的事务不会被丢失

但在下一次启动之时会做一个

崩溃恢复

innodb_file_io_threads 4 InnoDB中文件 IO线程的数量

innodb_file_per_table OFF InnoDB 用自己的 ibd 文件为存

储数据和索引创建每一个新表

而不是在共享表空间中创建

innodb_flush_log_at_trx_commit

1 0000日志缓冲每秒一次地被写到

日志文件1111在每个事务提交

时日志缓冲被写到日志文件

对日志文件做到磁盘操作的刷

新2222在每个事务提交时日志

缓冲被写到文件但不对日志文

件做到磁盘操作的刷新

innodb_flush_method fdatasyncfdatasyncfdatasyncfdatasync InnoDB使用 fsync()来刷 新 数 据 和 日 志 文 件

O_DSYNCO_DSYNCO_DSYNCO_DSYNC InnoDB 使 用

O_SYNC 来打开并刷新日志文

件但使用 fsync()来刷新数据文

innodb_force_recovery 0 强制恢复当这个选项值大于零

之时 InnoDB阻止用户修改数

innodb_lock_wait_timeout 50 InnoDB事务在被回滚之前可以

等待一个锁定的超时秒数

innodb_locks_unsafe_for_binlog

OFF InnoDB搜索和索引扫描中关闭

下一键锁定

innodb_log_buffer_size 8388608 InnoDB用来往磁盘上的日志文

件写操作的缓冲区的大小明智

的值是从 1MB到 8MB默认的

是 8MBinnodb_log_file_size 5242880 在日志组里每个日志文件的大

innodb_log_files_in_group 2 在日志组里日志文件的数目

innodb_log_group_home_dir homefalcondata10013

到 InnoDB 日志文件的目录路

径 它 必 须 有 和

innodb_log_arch_dir一样的值

innodb_max_dirty_pages_pct 90 这是一个范围从 0 到 100 的整

数默认是 90InnoDB中的主

线程试着从缓冲池写页面使得

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

33

脏页(没有被写的页面)的百分

比不超过这个值

innodb_max_purge_lag 0

innodb_mirrored_log_groups 1 数据库保持的日志组内同样拷

贝的数量当前这个值应该被设

为 1innodb_open_files 300 在 InnoDB中这个选项仅与你

使用多表空间时有关它指定

InnoDB一次可以保持打开的ibd文件的最大数目最小值是 10

默认值 300innodb_rollback_on_timeout OFF 是否开启回滚超时

innodb_support_xa ON 是否允许 InnoDB支持在 XA 事

务中的双向提交

innodb_sync_spin_loops 20

innodb_table_locks ON Innodb是否开启表锁定

innodb_thread_concurrency 8 线程并发数为 CPU2

innodb_thread_sleep_delay 10000 线程睡眠时间

insert_id 0 主要在 binlog 中使用

interactive_timeout 28800 服务器关闭交互式连接前等待

活动的秒数

join_buffer_size 131072 用于 join联接的缓冲区的大小

keep_files_on_create OFF

key_buffer_size 16384 MyISAM 表的索引块分配了缓

冲区

key_cache_age_threshold 300 该值控制将缓冲区从键值缓存

热子链降级到温子链

key_cache_block_size 1024 键值缓存内块的字节大小默认

值是 1024key_cache_division_limit 100 键值缓存缓冲区链热子链和温

子链的划分点

language homefalconmysqlsharemysqlenglish

错误消息所用语言

large_files_support ON 是否支持大文件

large_page_size 0 页面大小

large_pages OFF 是否启用了大页面支持

last_insert_id 0 最后插入的记录 ID值

lc_time_names en_US 本地语言显示时间设置

license GPL 许可证

local_infile ON 是否 LOCAL支持 LOAD DATAINFILE语句

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

34

locked_in_memory OFF 是否用ndashmemlock将mysqldmysqldmysqldmysqld锁在

内存中

log OFF 是否启用将所有查询记录到常

规查询日志中

log_bin ON 是否启用二进制日志

log_bin_trust_function_creators OFF Binlog 是否存储自定义的函数

log_bin_trust_routine_creators OFF Binlog 是否存储创建者的记录

log_error homefalcondata10013wwwfwphpcnerr

错误日志文件

log_output FILE 日志的输出形式(TABLEFile

NONE)log_queries_not_using_indexes OFF 是否记录慢查询中没有利用索

引的语句

log_slave_updates ON 从更新自己的 binlog 日志

log_slow_queries OFF 是否开启慢查询

log_warnings 1 是否显示警告信息

long_query_time 10000000 慢查询的时间单位是秒

low_priority_updates OFF 是否开启低权限的更新影响

insertupdatedelete 及 lock tablewrite事务等待

lower_case_file_system OFF

lower_case_table_names 0

max_allowed_packet 1048576 最大允许的数据包大小

max_binlog_cache_size 4294967295 最大 binlog 日志缓冲大小

max_binlog_size 1073741824 最大 binlog 日志文件大小

max_connect_errors 10 最大连接错误的次数

max_connections 151 最大连接数

max_delayed_threads 20 最大线程延迟数

max_error_count 64 显示 在 SHOW ERRORS SHOW

WARNINGS 的最大数

max_heap_table_size 16777216 最大 hash表的大小

max_insert_delayed_threads 20 最大插入延迟的线程数

max_join_size 18446744073709551615

最大 join大小

max_length_for_sort_data 1024 最大排序数据的大小

max_prepared_stmt_count 16382 最大预处理事务数

max_relay_log_size 0 Relay日志的大小

max_seeks_for_key 4294967295 限制根据键值寻找行时的最大

搜索数

max_sort_length 1024 最大排序字段数

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

35

max_sp_recursion_depth 0

max_tmp_tables 32 最大临时表数量

max_user_connections 0 最大用户连接数限制

max_write_lock_count 4294967295 超过写锁定限制后允许部分读

锁定

min_examined_row_limit 0

multi_range_count 256

myisam_data_pointer_size 6 默认指针大小单位是字节当

未指定 MAX_ROWS 选项时

CREATE TABLE 使用该变量创

建 MyISAM表该变量不能小于

2或大于7 默认值是6myisam_max_sort_file_size 2147483647 重建 MyISAM 索引 (在 REPAIR

TABLE ALTER TABLE 或

LOAD DATA INFILE 过 程

中)时允许MySQL 使用的临时

文件的最大空间大小如果文件

的大小超过该值则使用键值缓

存创建索引要慢得多该值的

单位为字节

myisam_recover_options OFF

myisam_repair_threads 1 如果该值大于 1在 Repair bysorting 过 程 中 并 行 创 建

MyISAM 表索引(每个索引在自

己的线程内) 默认值是1myisam_sort_buffer_size 8388608 当 在 REPAIR TABLE 或 用

CREATE INDEX 创建索引或

ALTER TABLE 过程 中 排 序

MyISAM索引分配的缓冲区

myisam_stats_method nulls_unequal 当为 MyISAM 表搜集关于索引

值分发的统计信息时服务器如

何处理 NULL值该变量有两个

可 能 的 值 nulls_equal 和

nulls_unequal对于 nulls_equal认为所有 NULL索引值时相等

的并形成一个数值组其空间

大小等于 NULL 值的数对于

nulls_unequalNULL 值认为是

不相等的每个NULL形成一个

数值组大小为1myisam_use_mmap OFF

ndb_autoincrement_prefetch_sz 1

ndb_cache_check_time 0

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

36

ndb_connectstring NDB连接字符串

ndb_extra_logging 0

ndb_force_send ON NDB是否强制发送

ndb_index_stat_cache_entries 32

ndb_index_stat_enable OFF

ndb_index_stat_update_freq 20

ndb_report_thresh_binlog_epoch_slip

3

ndb_report_thresh_binlog_mem_usage

10

ndb_use_copying_alter_table OFF

ndb_use_exact_count ON

ndb_use_transactions ON Ndb 引擎是否开启事务

net_buffer_length 2048 在查询之间将通信缓冲区重设

为该值一般情况不应改变但

如果内存很小可以将它设置为

期望的客户端发送的 SQL语句

的长度如果语句超出该长度

缓 冲 区 自 动 扩 大 直 到

max_allowed_packet字节

net_read_timeout 30 中断读前等待连接的其它数据

的秒数当服务器从客户端读数

时net_read_timeout 指控制何时

中断的超时值当服务器向客户

端写时net_write_timeout 指控

制何时中断的超时值

net_retry_count 10 如果某个通信端口的读操作中

断了在放弃前重试多次

net_write_timeout 60 中断写之前等待块写入连接的

秒数

new OFF

old OFF

old_alter_table OFF

old_passwords OFF

open_files_limit 1024 打开文件数限制

optimizer_prune_level 1 在查询优化从优化器搜索空间

裁减低希望局部计划中使用的

控制方法0值禁用该方法以

便优化器进行穷举搜索值为1使优化器根据中间方案中得出

的行数来裁减方案

optimizer_search_depth 62 优化搜索深度

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

37

pid_file homefalcondata10013wwwfwphpcnpid

PID文件目录

plugin_dir homefalconmysqllibmysqlplugin

插件目录

port 10013

preload_buffer_size 32768 重载索引时分配的缓冲区大小

profiling OFF 是否开启 show profile

profiling_history_size 15

protocol_version 10

pseudo_thread_id 11

query_alloc_block_size 8192 为查询分析和执行过程中创建

的对象分配的内存块大小如果

内存分段过程中遇到问题将该

变量增加一位会有帮助

query_cache_limit 1048576 不要缓存大于该值的结果默认

值是1048576(1MB)query_cache_min_res_unit 4096 查询缓存分配的最小块的大小

(字节) 默认值是4096(4KB)query_cache_size 0 为缓存查询结果分配的内存的

数量默认值是0即禁用查询

缓存

query_cache_type ON 设置查询缓存类型0不要缓

存或查询结果请注意这样不会

取消分配的查询缓存区要想取

消你应将 query_cache_size 设

置为01缓存除了以 SELECTSQL_NO_CACHE开头的所有查

询结果2只缓存以 SELECTSQL_NO_CACHE开头的查询结

query_cache_wlock_invalidate OFF 一般情况当客户端对MyISAM表进行 WRITE锁定时如果查

询结果位于查询缓存中则其它

客户端未被锁定可以对该表进

行查询将该变量设置为1则

可以对表进行 WRITE锁定使

查询缓存内所有对该表进行的

查询变得非法这样当锁定生效

时可以强制其它试图访问表的

客户端来等待

query_prealloc_size 8192 用于查询分析和执行的固定缓

冲区的大小在查询之间该缓冲

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

38

区不释放如果你执行复杂查

询 分 配 更 大 的

query_prealloc_size 值可以帮助

提高性能因为它可以降低查询

过程中服务器分配内存的需求

rand_seed1

rand_seed2

range_alloc_block_size 4096 范围优化时分配的块的大小

read_buffer_size 262144 每个线程连续扫描时为扫描的

每个表分配的缓冲区的大小 (字节)如果进行多次连续扫描可

能需要增加该值

read_only OFF 当变量对复制从服务器设置为

ON 时从服务器不允许更新

除非通过从服务器的线程或用

户拥有 SUPER权限可以确保

从服务器不接受客户端的更新

命令

read_rnd_buffer_size 262144 当排序后按排序后的顺序读取

行时则通过该缓冲区读取行

避免搜索硬盘将该变量设置为

较大的值可以大大改进 ORDERBY 的性能但是这是为每个

客户端分配的缓冲区因此你不

应将全局变量设置为较大的值

相反只为需要运行大查询的客

户端更改会话变量

relay_log homefalconlogs10013www-relay-bin

中继日志路径及文件名

relay_log_index 中继日志 index文件

relay_log_info_file relay-loginfo

relay_log_purge ON 是否删除中继日志

relay_log_space_limit 0

report_host

report_password

report_port 10000

report_user

rpl_recovery_rank 0

secure_auth OFF 是否开启安全认证

secure_file_priv 权限文件

server_id 1

skip_external_locking ON 如果 mysqldmysqldmysqldmysqld 使用外部锁定该

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

39

值为 OFF

skip_networking OFF 如果服务器只允许本地 (非TCPIP)连接该值为 ON在

Unix 中本地连接使用 Unix 套

接字文件在Windows中本地

连接使用命名管道或共享内存

在 NetWare 中只支持 TCPIP连接因此不要将该变量设置为

ONskip_show_database OFF

slave_compressed_protocol OFF 如果主从服务器均支持确定

是否使用从主压缩协议

slave_exec_mode STRICT

slave_load_tmpdir tmp 从服务器为复制 LOAD DATAINFILE 语句创建临时文件的目

录名

slave_net_timeout 3600 放弃读操作前等待主 从连接的

更多数据的等待秒数

slave_skip_errors OFF 从服务器应跳过(忽视)的复制错

slave_transaction_retries 10 如果由于 InnoDB死锁或超过

InnoDB的

innodb_lock_wait_Timeout

或 NDBCLUSTER的

TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout复制

从服务器 SQL线程未能执行事

务在提示错误并停止前它自动

重复 slave_transaction_retries次slow_launch_time 2 慢查询执行次数

slow_query_log OFF 是否开启慢查询日志

slow_query_log_file homefalcondata10013www-slowlog

慢查询日志文件路径

socket tmpmysql-10013sock

Socket 文件路径

sort_buffer_size 65536 每个排序线程分配的缓冲区的

大小 增 加该 值 可以 加 快

ORDER BY 或GROUP BY 操作

sql_auto_is_null ON

sql_big_selects ON

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

40

sql_big_tables OFF

sql_buffer_result OFF

sql_log_bin ON

sql_log_off OFF

sql_log_update ON

sql_low_priority_updates OFF

sql_max_join_size 18446744073709551615

sql_mode 当前的服务器 SQL模式可以动

态设置

sql_notes ON

sql_quote_show_create ON

sql_safe_updates OFF

sql_select_limit 18446744073709551615

sql_slave_skip_counter 从服务器应跳过的来自主服务

器的事件数

sql_warnings OFF SQL警告

ssl_ca

ssl_capath

ssl_cert

ssl_cipher

ssl_key

storage_engine InnoDB 默认存储引擎

sync_binlog 0 如果为正当每个 sync_binlogth写入该二进制日志后MySQL服务器将它的二进制日志同步

到硬盘上(fdatasync())请注意如

果在 autocommit模式每执行一

个语句向二进制日志写入一次

否则每个事务写入一次 默认

值是0不与硬盘同步值为1是最安全的选择因为崩溃时你

最多丢掉二进制日志中的一个

语句事务但是这是最慢的选

择(除非硬盘有电池备份缓存从

而使同步工作较快)sync_frm ON 如果该变量设为1当创建非临时

表时它的frm文件被同步到硬盘

上(fdatasync())这样较慢但出现

崩溃时较安全 默认值为1

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

41

system_time_zone CST 系统时区

table_definition_cache 256

table_lock_wait_timeout 50 表锁定超时时间

table_open_cache 4 所有线程打开表的数目

table_type InnoDB 默认表类型

thread_cache_size 0 服务器应缓存多少线程以便重

新使用

thread_handling one-thread-per-connection

线程实例

thread_stack 131072 线程栈的大小

time_format His 时间格式

time_zone SYSTEM 时区

timed_mutexes OFF

timestamp 1261555213 当前时间戳

tmp_table_size 16777216 临时表大小

tmpdir tmp 临时文件大小

transaction_alloc_block_size 8192 事务分配的块大小

transaction_prealloc_size 4096 为 transaction_alloc_blocks 分配

的固定缓冲区的大小(字节)

在两次查询之间不会释放使该

值足够大将所有查询固定到一

个事务 中 可 以 避免 多 次

malloc()调用

tx_isolation REPEATABLE-READ

默认事务隔离级别

unique_checks ON 唯一性检查

updatable_views_with_limit YES

version 5130-log MySQL服务器的版本

version_comment Source distribution 版本描叙

version_compile_machine i686 版本兼容的机器

version_compile_os pc-linux-gnu 版本兼容系统

wait_timeout 28800 等待超时时间

warning_count 0 警告计数器

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools

42

八压力测试

压力测试工具为 MySQL自带的mysqlslap基本用法如下

$homefalconmysqlbinmysqlslap --defaults-file=etcmy-10000cnf --concurrency=50100 --iterations=10 --number-int-cols=4 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200 -S tmpmysql-10000sock -u root

MySQL主主复制管理工具mmm httpmysql-mmmorg

InnoDB数据恢复工具httpcodegooglecompinnodb-tools


Recommended