一、 mysql 服务器环境的安装配置 mysql replication mysql mysql2 mysql...
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