Mysql编译安装及优化

时间:2023-01-11 21:03:28

采取编译安装的方法,其好处为:编译安装与平台无关,安装的MySQL目录独立,维护起来方便,而且拥有更好的性能。

环境:CentOS release 6.9 (Final)  x86_64

1)下载mysql 链接:http://mirrors.sohu.com/mysql/MySQL-5.1/mysql-5.1.72.tar.gz
安装基础环境:
yum -y install gcc gcc-c++ zlib-devel libtool ncurses-devel libxml2-devel wget
首先添加mysql用户及组
groupadd mysql
useradd -g mysql mysql
编译安装:
cd /usr/local/src
wget http://mirrors.sohu.com/mysql/MySQL-5.1/mysql-5.1.72.tar.gz
tar xf mysql-5.1.72.tar.gz
cd mysql-5.1.72
./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-extra-charsets=all --enable-thread-safe-client --enable-assembler --with-readline --with-big-tables --with-plugins=all --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static
make && make install
2)配置权限,数据安装路径为/data/mysql并设置开机自启动:
cd /usr/local/mysql/
cp /usr/local/mysql/share/mysql/my-huge.cnf /etc/my.cnf
cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chown -R mysql:mysql /usr/local/mysql/
mkdir -p /data/mysql //数据存放路径
sed -i '39a datadir=/data/mysql' /etc/my.cnf //加入配置文件
/usr/local/mysql/bin/mysql_install_db --user=mysql --datadir=/data/mysql //初始化文件和数据库
启动时遇到错误:
[root@localhost mysql]# service mysqld start
Starting MySQL. ERROR! Manager of pid-file quit without updating file.
解决方法:http://www.jb51.net/article/48625.htm
问题解决后:
service mysqld start
chkconfig mysqld on
配置环境:
echo 'export PATH=/usr/local/mysql/bin:$PATH'>>/etc/profile
source /etc/profile
对数据库简单优化:
mysql> select user,host from mysql.user;
mysql> delete from mysql.user where host='::1'
mysql> delete from mysql.user where host='localhost.localdomain';
mysql> drop database test;
设置数据库密码:
mysqladmin -u root password '123'
登录方式:
mysql -uroot -p123
修改密码:
mysqladmin -uroot -p123 password '111' 2)mysql配置文件优化
配置文件如下:
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld] //mysqld服务启动时的参数
port = 3306 //端口号
socket = /tmp/mysql.sock //用户在linux环境下客户端连接可以不通过TCP/IP网络
skip-locking
key_buffer_size = 384M //索引的缓冲区大小可设置为256M或384M,不建议设置过大
max_allowed_packet = 4M      //消息传输量的最大值,默认1M最大1G,必须为1024的倍数
table_open_cache = 512 //高速缓存大小
sort_buffer_size = 2M                //查询排序时使用的缓冲区大小
read_buffer_size = 2M                //读查询操作使用的缓冲区大小
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8 //连接线程最大数值 0~16384、1GB内存可以配置为8,2GB内存可以配置为16,3GB内存可以配置为32,4GB及以上64
query_cache_size = 32M //mysql查询缓冲区大小
thread_concurrency = 8
datadir=/data/mysql
log-bin=mysql-bin
server-id = 1
max_connections = 456                //允许的最大连接进程数
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout

做别名方便启动mysql:

alias mysql='/usr/local/mysql/bin/mysql'

Mysql编译安装及优化

2)优化

查看运行各种状态值:
mysql> show global status;
1、慢查询
慢查询是指超过指定时间的SQL语句查询,分析MySQL语句查询性能的方法除了使用EXPLAIN输出执行计划,还可以让MySQL记录下查询超过指定时间的语句。
mysql> show variables like '%slow%';
开启慢查询:
mysql>set global slow_query_log=ON;
如果是主从结构,可以打开一台从服务器的慢查询来监控,或者用自带的命令查询
[root@localhost bin]# ./mysqldumpslow -s -c -t 20 /data/mysql/localhost-slow.log
2、连接数
遇见“MySQL:ERROR 1040:Too manyconnections”的情况配置文件中max_connections的值过小。
mysql> show variables like 'max_connections';
查看过去最大连接数如果达到上限需要增大:
mysql> show global status like 'Max_used_connections';
3、key_buffer_size
key_buffer_size是设置MyISAM表索引引擎缓存空间的大小
mysql> show variables like 'key_buffer_size';
4、临时表
mysql>show global status like 'created_tmp%';
5、open table的情况
open_tables表示打开表的数量,opened_tables表示打开过的表数量
mysql>show global status like 'open%tables%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables | 9 |
| Opened_tables | 15 |
+---------------+-------+
6、进程使用情况
threads_created表示创建过的线程数
mysql>show global status like 'Thread%';
threads_created的值过大,表明MySQL服务器一直在创建线程,这也是比较耗资源的,可以适当增大配置文件中thread_cache_size的值。
mysql>show variables like 'thread_cache_size';
7、查询缓存
query_cache_size用于设置MySQL的查询缓存(query cache)大小,query_cache_type用于设置使用查询缓存的类型
8、排序使用情况
mysql>show global status like 'sort%';
9、文件打开数
文件打开数(open_files)大于open_files_limit值时,MySQL数据库就会产生卡住的现象。
mysql>show global status like 'open_files';
mysql>show variables like 'open_files_limit';
10、Innodb_buffer_pool_size的合理设置

平台配置:

[client]
default-character-set=utf8
port      =3306
socket     =/tmp/mysql.sock
[mysqld]
user      =mysql
port      =3306
socket     =/tmp/mysql.sock
basedir    =/usr/local/mysql
datadir    =/data/mysql/data
log-error   =/data/mysql/mysql-error.log
pid-file    =/data/mysql/mysql.pid
old-passwords =1
log_slave_updates=1
log-bin       =/data/mysql/binlog/mysql-bin
binlog_format    =mixed
binlog_cache_size  =4M
max_binlog_cache_size=8M
max_binlog_size   =1G
expire_logs_days   =90
binlog-ignore-db  =mysql
binlog-ignore-db  =test
binlog-ignore-db  =information_schema
key_buffer_size     =384M
sort_buffer_size    =2M
read_buffer_size    =2M
read_rnd_buffer_size  =16M
join_buffer_size    =2M
thread_cache_size    =8
query_cache_size    =32M
query_cache_limit    =2M
query_cache_min_res_unit=2k
thread_concurrency   =32
table_cache    =614
table_open_cache =512
open_files_limit =10240
back_log     =600
max_connections  =5000
max_connect_errors=6000
external-locking =FALSE
max_allowed_packet   =16M
default-storage-engine =MyISAM
thread_stack      =192K
transaction_isolation  =READ-COMMITTED
tmp_table_size     =256M
max_heap_table_size   =512M
bulk_insert_buffer_size =64M
myisam_sort_buffer_size =64M
myisam_max_sort_file_size=10G
myisam_repair_threads  =1
myisam_recover
long_query_time   =2
slow_query_log
slow_query_log_file =/data/mysql/slow.log
skip-name-resolve
skip-locking
skip-networking
innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 512M
innodb_data_file_path = ibdata1:256M:autoextend
innodb_file_io_threads = 4
innodb_thread_concurrency = 8
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M
innodb_log_file_size = 128M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_file_per_table = 0
[mysqldump]
quick
max_allowed_packet = 64M
[mysql]
no-auto-rehash
Remove the next comment character if you are not familiar with SQL
safe-updates
[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 256M
read_buffer   = 2M
write_buffer  = 2M
[mysqlhotcopy]
interactive-timeout