您的位置:首页 > 数据库 > MySQL

MySQL系列—服务器安装与配置

2017-07-11 18:56 399 查看

一、安装依赖

1、安装编译工具及库文件

[root@localhost src]# yum -y install gcc gcc-c++ make autoconf libtool-ltdl-devel gd-devel freetype-devel libxml2-devel libjpeg-devel libpng-devel openssl-devel curl-devel bison patch unzip libmcrypt-devel libmhash-devel ncurses-devel sudo bzip2 flex libaio-devel


2、 安装cmake 编译器

# 1、下载地址:http://www.cmake.org/files/v3.1/cmake-3.1.1.tar.gz
[root@localhost src]# wget http://www.cmake.org/files/v3.1/cmake-3.1.1.tar.gz # 2、解压安装包
[root@localhost src]# tar zxvf cmake-3.1.1.tar.gz
#  3、进入安装包目录
[root@localhost src]# cd cmake-3.1.1
4、编译安装
[root@localhost cmake-3.1.1]# ./bootstrap
[root@localhost cmake-3.1.1]# make && make install


二、安装 MySQL

1、下载并解压

[root@localhost src]# wget https://cdn.mysql.com//archives/mysql-5.6/mysql-5.6.24.tar.gz [root@localhost src]# tar xvf mysql-5.6.24.tar.gz
[root@localhost src]# cd mysql-5.6.24


2、进行编译配置,这个过程将耗时3~5分钟

[root@localhost mysql-5.6.24]# cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci


3、编译并且安装,编译过程大约需要30~50分钟

[root@localhost mysql-5.6.24]# make
[root@localhost mysql-5.6.24]# make install


三、MySQL 配置

1、创建mysql运行使用的用户mysql

[root@localhost mysql-5.6.24]# groupadd mysql
[root@localhost mysql-5.6.24]# useradd -r -g mysql mysql
[root@localhost mysql-5.6.24]# cd /usr/local/mysql/


2、创建binlog和库的存储路径并赋予mysql用户权限

[root@localhost mysql]# mkdir -p /data/mysql/binlog /data/mysql/data
[root@localhost mysql]# chown mysql:mysql /data/mysql/binlog/ /data/mysql/data/


3、创建my.cnf配置文件,将/etc/my.cnf替换为下面内容

简版:

[mysqld]
#指定默认端口为3306
port=3306
#指定MySQL监听的地址
bind-address=192.168.2.106
#指定MySQL的主目录
basedir=/usr/local/mysql
#指定数据目录
datadir=/data/mysql/data
socket=/tmp/mysql.sock
#启动时使用的用户
user=mysql
#指定时区与系统一致
default-time-zone=system
#指定使用的存储引擎为InnoDB
default-storage-engine=InnoDB
#指定错误日志位置
log-error=/var/log/mysqld.log

#默认配置的MySQL模式
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[mysql]
socket=/tmp/mysql.sock

[client]
socket=/tmp/mysql.sock

[mysqldump]
socket=/tmp/mysql.sock

[mysqladmin]
socket=/tmp/mysql.sock


复杂版

[root@localhost mysql]# cat /etc/my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
replicate-ignore-db = mysql
replicate-ignore-db = test
replicate-ignore-db = information_schema
#启动时使用的用户
user = mysql
#指定默认端口为3306
port = 3306
socket = /tmp/mysql.sock
#指定MySQL的主目录
basedir = /usr/local/mysql
#指定数据目录
datadir = /data/mysql/data
#指定时区与系统一致
default-time-zone=system
#指定使用的存储引擎为InnoDB
default-storage-engine=InnoDB
default-storage-engine = InnoDB
default-tmp-storage-engine=InnoDB
#指定错误日志位置
log-error = /data/mysql/mysql_error.log
pid-file = /data/mysql/mysql.pid
open_files_limit = 65535
back_log = 600
max_connections = 5000
max_connect_errors = 1000
table_open_cache = 1024
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 1M
join_buffer_size = 1M
thread_cache_size = 600
#thread_concurrency = 8
query_cache_size = 128M
query_cache_limit = 2M
query_cache_min_res_unit = 2k
thread_stack = 192K
transaction_isolation = READ-COMMITTED
tmp_table_size = 128M
max_heap_table_size = 128M
log-slave-updates
log-bin = /data/mysql/binlog/binlog
binlog-do-db=oa_fb
binlog-ignore-db=mysql
binlog_cache_size = 4M
binlog_format = MIXED
max_binlog_cache_size = 8M
max_binlog_size = 1G
relay-log-index = /data/mysql/relaylog/relaylog
relay-log-info-file = /data/mysql/relaylog/relaylog
relay-log = /data/mysql/relaylog/relaylog
expire_logs_days = 10
key_buffer_size = 256M
read_buffer_size = 1M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
interactive_timeout = 120
wait_timeout = 120
skip-name-resolve
#master-connect-retry = 10
slave-skip-errors = 1032,1062,126,1114,1146,1048,1396
#master-host = 192.168.1.2
#master-user = username
#master-password = password
#master-port = 3306
server-id = 1
loose-innodb-trx=0
loose-innodb-locks=0
loose-innodb-lock-waits=0
loose-innodb-cmp=0
loose-innodb-cmp-per-index=0
loose-innodb-cmp-per-index-reset=0
loose-innodb-cmp-reset=0
loose-innodb-cmpmem=0
loose-innodb-cmpmem-reset=0
loose-innodb-buffer-page=0
loose-innodb-buffer-page-lru=0
loose-innodb-buffer-pool-stats=0
loose-innodb-metrics=0
loose-innodb-ft-default-stopword=0
loose-innodb-ft-inserted=0
loose-innodb-ft-deleted=0
loose-innodb-ft-being-deleted=0
loose-innodb-ft-config=0
loose-innodb-ft-index-cache=0
loose-innodb-ft-index-table=0
loose-innodb-sys-tables=0
loose-innodb-sys-tablestats=0
loose-innodb-sys-indexes=0
loose-innodb-sys-columns=0
loose-innodb-sys-fields=0
loose-innodb-sys-foreign=0
loose-innodb-sys-foreign-cols=0

slow_query_log_file=/data/mysql/mysql_slow.log
long_query_time = 1
[mysqldump]
quick
max_allowed_packet = 32M


4、初始化数据库

# 需要注意的是此处设置的数据目录应该与之前的MYSQL_DATADIR指定的目录相同
[root@localhost mysql]# scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=mysql -ldata=/data/mysql/data
# 恢复权限设置,并修改相应目录的权限以便mysql修改
[root@localhost mysql]# chown -R root ./
[root@localhost mysql]# chown -R mysql data


三、添加为系统服务

1、创建启动脚本

[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld


2、修改其权限并开机启动

[root@localhost mysql]# chkconfig --add mysqld
[root@localhost mysql]# chkconfig --level 35 mysqld on


3、启动MySQL

# 启动mysql服务器
[root@localhost mysql]# service mysqld start
# 连接 MySQL(由于还没有设置密码因此直接按下Enter键即可)
[root@localhost mysql]# /usr/local/mysql/bin/mysql -u root -p
# 设置root用户的密码为888888
mysql>set password = password('888888');
# 设置完成后输入quit退出
mysql>quit


# 修改MySQL用户密码
[root@localhost mysql]# mysqladmin -u用户名 -p旧密码 password 新密码
# 或进入mysql命令行
mysql>SET PASSWORD FOR '用户名'@'主机' = PASSWORD(‘密码');
# 创建新用户并授权:
mysql>grant all privileges on *.* to 用户名@'%' identified by '密码' with grant option;


其他命令

启动:service mysqld start

停止:service mysqld stop

重启:service mysqld restart

重载配置:service mysqld reload

上述示例表示将MySQL软件安装到/usr/local/mysql目录下,本示例中使用的参数及其含义如下

DCMAKE_INSTALL_PREFIX:表示将MySQL安装到何处,此例中将安装到/usr/local/mysql目录中;

DMYSQL_DATADIR:表示MySQL的数据文件存放目录;

DSYSCONFDIR:配置文件所在目录;

DWITH_MYISAM_STORAGE_ENGINE:将MyISAM存储引擎编译到服务中;

DWITH_INNOBASE_STORAGE_ENGINE:将InnoDB存储引擎编译到服务中;

DMYSQL_UNIX_ADDR:

DMYSQL_TCP_PORT:默认使用的端口;

DENABLED_LOCAL_INFILE:指定是否允许本地执行LOAD DATA INFILE;

DWITH_PARTITION_STORAGE_ENGINE:将分区引擎编译到服务中;

DEXTRA_CHARSETS:让服务支持所有扩展字符集;

DDEFAULT_CHARSET:服务使用的默认字符集,此处设置为UTF8;

DDEFAULT_COLLATION:默认的排序规则。

编译安装MySQL时有许多参数,这些参数的详细含义和说明可以在官方网站中查找:http://dev.mysql.com/doc/refman/5.5/en/source-configuration-options.html

安装的依赖包的作用:

gcc/g++:MySQL 5.6开始,需要使用g++进行编译;

cmake:MySQL 5.5开始,使用cmake进行工程管理,cmake需要2.8以上版本;

bison:MySQL语法解析器需要使用bison进行编译;

ncurses-devel:用于终端操作的开发包;

zlib:MySQL使用zlib进行压缩;

libxml:用于XML输入输出方式的支持;

openssl:使用openssl安全套接字方式通信;

dtrace:用于诊断MySQL问题。

附:安装过程中的问题总结

1、-bash:mysql:command not found

因为mysql命令的路径在/usr/local/mysql/bin下面,所以你直接使用mysql命令时, 系统在/usr/bin下面查此命令,所以找不到了。

解决办法:使用如下命令做个链接即可

ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql


2、Starting MySQL..The server quit without updating PID file ([FAILED]/mysql/Server03.mylinux.com.pid).

Google了下 ,问题可能的原因有多种,具体什么原因最好的办法是先查看下错误日志:

本人遇到的问题:隔了两三个月之后再次启动mysql,这时不仅电脑换了而且也换了工作环境(这是重点,来到了更大的IT公司)。一换工作环境,内网的IP地址段就换了:192.168.2.106 —> 10.73.150.4。然后配置文件/etc/my.cnf里的“bind-address=192.168.2.106”这货就惹事了。启动时报一下错误:



其中“localdomain”表示本地域的意思。出现这个错误的原因主要就是因为两个IP不再同一段内。通过查看/etc/rc.d/init.d/mysqld脚本文件,可以看到pid文件的命名方式。



所以决解方法有三种:

“bind-address”注释掉;

改一下IP;

直接指定pid文件:pid-file = /data/mysql/mysql.pid。

2.1 可能是/usr/local/mysql/data/mysql.pid(mysql启动后才有此文件)文件没有写的权限

解决方法 :给予权限,执行 如下命令

chown -R mysql:mysql /data/mysql/data
chmod -R 755 /usr/local/mysql/data


然后重新启动mysqld。

2.2 可能进程里已经存在mysql进程

解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9 进程号”杀死,然后重新启动mysqld!

2.3 可能是第二次在机器上安装mysql,有残余数据影响了服务的启动

解决方法:去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了。

2.4 mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir)

解决方法:请在[mysqld]下设置这一行:datadir = /data/mysql/data

2.5 skip-federated字段问题

解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。

2.6 错误日志目录不存在

解决方法:使用“chown” “chmod”命令赋予mysql所有者及权限

2.7 selinux惹的祸,如果是centos系统,默认会开启selinux

解决方法:关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器试试。

3、ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)

原因:当使用host参数为“localhost”连接Mysql服务时,会优先使用“sock文件”进行连接,而不是使用“IP:端口”进行连接,而Mysql尝试使用“sock文件”进行连接时,却无法获取“sock文件”的位置。

解决办法:要解决此错误,有两种解决方法

将连接参数“host”的值由“localhost”改成“127.0.0.1”;

按下面方法,在“/etc/mysql.cnf”中指定“sock文件”位置。

3.1 查看mysql服务的socket文件位置

mysql socket文件的位置是在/etc/my.cnf中设置的,cat /etc/my.cnf内容如下:

[mysqld]
datadir=/storage/db/mysql
socket=/storage/db/mysql/mysql.sock
user=mysql


其中socket等于的路径就是socket文件的位置,我们只要修改my.cnf文件,告诉mysql,mysqldump,mysqladmin等mysql服务的socket位置在哪里就可以。

3.2 修改my.cnf文件

在/etc/my.cnf文件中添加如下内容,并重启mysqls服务,即可解决mysql,mysqldump,mysqladmin的“Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’”问题:

[mysqld]
socket=/tmp/mysql.sock

[mysql]
socket=/tmp/mysql.sock

[client]
socket=/tmp/mysql.sock

[mysqldump]
socket=/tmp/mysql.sock

[mysqladmin]
socket=/tmp/mysql.sock


4、远程访问局域网内的mysql时出现ERROR 2003 (HY000): Can’t connect to MySQL server on (10061)

解决方法:my.ini(my.cnf)默认的bind-address是127.0.0.1,这样的话就算你创建的用户有可以remote访问的话 也不能通过-h 来访问。 mysql只接受localhost。 所以把bind-address屏蔽掉即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: