MySQL 系列(一)安装

以 Centos7 下安装 MySQL 5.6 为例。

一、环境准备

(1) 下载

下载地址: https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz

(2) 安装依赖

yum -y install perl perl-devel autoconf libaio

(3) 卸载已安装的 MySQL

yum list installed | grep mysql  # 查询已安装的 MySQL
yum -y remove mysql-libs.x86_64 # 卸载

(4) 创建 mysql 用户

userdel mysql           # 删除 mysql 用户
groupdel mysql # 删除 mysql 用户组
groupadd mysql # 创建 mysql 用户组
useradd -g mysql mysql # 创建 mysql 用户并加入 mysql 用户组
echo mysql | passwd --stdin mysql # mysq 添加密码

(5) sudo 免密码操作

visudo

%wheel  ALL=(ALL)         NOPASSWD: ALL

# 用户加入 wheel 组
gpasswd -a mysql wheel

二、MySQL 安装

(1) 切换到 mysql 帐号

# 切换到 mysql 帐号
su - mysql

(2) 将下载的二进制安装包解压后放到 /usr/local/mysql 目录下

sudo tar -zxvf mysql-5.6.38-linux-glibc2.12-x86_64.tar.gz
sudo mv mysql-5.6.38-linux-glibc2.12-x86_64 /usr/local/mysql

(3) 环境变量

sudo vim /etc/profile

export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin source /etc/profile # 立即生效

(4) 在 etc 下新建配置文件 my.cnf

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock [mysqld]
user=mysql
skip-name-resolve
#设置3306端口
port = 3306
socket=/var/lib/mysql/mysql.sock
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M

说明:

  • 使用 mysqld --help -vv | grep my.cnf 查看 mysql 的配置文件读取顺序。

    [root@binarylei mysql]# mysql --help --vv | grep my.cnf
    order of preference, my.cnf, $MYSQL_TCP_PORT,
    /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf /usr/local/mysql/my.cnf ~/.my.cnf
  • 后读取的 my.cnf 中的配置,如果有相同项,会覆盖之前的配置。

  • 使用 --defaults-files 可指定配置文件。

(5) 创建 /var/lib/mysql 并将用户修改为 mysql

# my.cnf 文件中配制的 socket 目录
sudo mkdir /var/lib/mysql
sudo chown -R mysql:mysql /var/lib/mysql

(6) 初始化 MySQL

# 一定要在 mysql 的安装目录下
./scripts/mysql_install_db --user=mysql

到此 MySQL 安装完毕!下面介绍 MySQL 作为服务启动方式。

三、MySQL 启动

1、添加mysql服务开机自启动

sudo cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld    # 复制启动脚本到资源目录
sudo chmod +x /etc/rc.d/init.d/mysqld # 增加 mysqld 服务控制脚本执行权限
sudo chkconfig --add mysqld # 将 mysqld 服务加入到系统服务
sudo chkconfig --list mysqld # 检查 mysqld 服务是否已经生效

命令输出类似下面的结果:

mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off

表明 mysqld 服务已经生效,在2、3、4、5运行级别随系统启动而自动启动,以后可以使用 service 命令控制 mysql 的启动和停止。

2、启动msql

service mysqld start    # 启动 msql
service mysqld stop # 停止msql

MySQL 启动后后有两个进程,其中 mysqld_safe 为守护进程,当 MySQL 异常关闭时会重新拉起 mysqld 进程。

root     22513     1  0 Jan04 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/binarylei.pid
mysql 22824 22513 0 Jan04 ? 00:00:45 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=binarylei.err --pid-file=/usr/local/mysql/data/binarylei.pid --socket=/var/lib/mysql/mysql.sock

四、权限控制

(1) 设置 mysql 帐号和密码

以 root 账户登陆 mysql,默认是没有密码

UPDATE mysql.user SET password=password('123456') WHERE user='root' AND host='localhost';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;

(2) 去除匿名用户

delete from mysql.user where User='';   # 删除匿名用户,使用root用户登录数据库
flush privileges;

五、MySQL 升级

以 MySQL5.6 -> 5.7 为例。如果不是跨很大的版本,通常不用 mysqldump 备份数据,直接使用 mysql_upgrade 进行升级。mysql_upgrade 建议使用 -s 参数,只升级系统表,不用升级数据表,因为如果数据量很大,会导致升级非常慢。

注意: 升级前后 my.cnf 中的配置项 datadir 参数相同。

# 更新 MySQL 软件包,直接将 mysql 软链接由 mysql-5.6 指向 mysql-5.7
service mysqld stop
unlink /usr/local/mysql
ln -sv /usr/local/lib/mysql-5.7 /usr/local/mysql
service mysqld start # -s表示只升级系统表,通常情况下不用升级数据表 --force表示已经升级了
mysql_upgrade -s --force mysql_upgrade -h
-f, --force Force execution of mysqlcheck even if mysql_upgrade has
already been executed for the current version of MySQL.
-s, --upgrade-system-tables
Only upgrade the system tables do not try to upgrade the data.

六、错误处理

MySQL 日志存储目录: my.cnf 中配制了 datadir 目录,如 datadir=/usr/local/mysql/data,在 datadir 目录下会新建一个 “主机名.err” 的文件

(1) 问题 1:Can't connect to local MySQL server through socket '/tmp/mysql.sock'

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

解决方法:

打开 /etc/my.cnf,看看里面配置的 socket 位置是什么目录,如 socket=/var/lib/mysql/mysql.sock

MySQL 服务端启动时报错,则很可能是 mysql 用户没有操作 /var/lib/mysql 的权限。一般将 /var/lib/mysql 用户修改为 mysql 用户可以解决问题。

chown -R mysql:mysql /var/lib/mysql

MySQL 客户端连接时报错,则很可能是 socket 路径和 “/tmp/mysql.sock” 不一致。建立一个软连接:

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

七、附录

附录1:MySQL 5.6.X 安装:

shell> yum install libaio # Debain系用户:apt-get install libaio1
shell> groupadd mysql
shell> useradd -r -g mysql mysql
shell> cd /usr/local
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> cd mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell> bin/mysqld_safe --user=mysql &
# Next command is optional
shell> cp support-files/mysql.server /etc/init.d/mysql.server

附录2:MySQL 5.7.X 安装

shell> groupadd mysql
shell> useradd -r -g mysql mysql
shell> cd /usr/local
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> cd mysql
shell> mkdir mysql-files
shell> chmod 770 mysql-files
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> bin/mysqld --initialize --user=mysql #该步骤中会产生零时
#root@localhost密码
#需要自己记录下来
shell> bin/mysql_ssl_rsa_setup
shell> chown -R root .
shell> chown -R mysql data mysql-files
shell> bin/mysqld_safe --user=mysql &
# Next command is optional
shell> cp support-files/mysql.server /etc/init.d/mysql.server

附录3:my.ini 生产环境参考配置

[client]
user=root
password=12346 [mysqld]
########basic settings########
server-id = 11
port = 3306
user = mysql
bind_address = 10.166.224.32 #根据实际情况修改
autocommit = 0 #5.6.X安装时,需要注释掉,安装完成后再打开
character_set_server=utf8mb4
skip_name_resolve = 1
max_connections = 800
max_connect_errors = 1000
datadir = /data/mysql_data #根据实际情况修改,建议和程序分离存放
transaction_isolation = READ-COMMITTED
explicit_defaults_for_timestamp = 1
join_buffer_size = 134217728
tmp_table_size = 67108864
tmpdir = /tmp
max_allowed_packet = 16777216
sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"
interactive_timeout = 1800
wait_timeout = 1800
read_buffer_size = 16777216
read_rnd_buffer_size = 33554432
sort_buffer_size = 33554432
########log settings########
log_error = error.log
slow_query_log = 1
slow_query_log_file = slow.log
log_queries_not_using_indexes = 1
log_slow_admin_statements = 1
log_slow_slave_statements = 1
log_throttle_queries_not_using_indexes = 10
expire_logs_days = 90
long_query_time = 2
min_examined_row_limit = 100
########replication settings########
master_info_repository = TABLE
relay_log_info_repository = TABLE
log_bin = bin.log
sync_binlog = 1
gtid_mode = on
enforce_gtid_consistency = 1
log_slave_updates
binlog_format = row
relay_log = relay.log
relay_log_recovery = 1
binlog_gtid_simple_recovery = 1
slave_skip_errors = ddl_exist_errors
########innodb settings########
innodb_page_size = 8192
innodb_buffer_pool_size = 6G #根据实际情况修改
innodb_buffer_pool_instances = 8
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_lru_scan_depth = 2000
innodb_lock_wait_timeout = 5
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_flush_method = O_DIRECT
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda
innodb_log_group_home_dir = /redolog/ #根据实际情况修改
innodb_undo_directory = /undolog/ #根据实际情况修改
innodb_undo_logs = 128
innodb_undo_tablespaces = 3
innodb_flush_neighbors = 1
innodb_log_file_size = 4G #根据实际情况修改
innodb_log_buffer_size = 16777216
innodb_purge_threads = 4
innodb_large_prefix = 1
innodb_thread_concurrency = 64
innodb_print_all_deadlocks = 1
innodb_strict_mode = 1
innodb_sort_buffer_size = 67108864
########semi sync replication settings########
plugin_dir=/usr/local/mysql/lib/plugin #根据实际情况修改
plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_slave_enabled = 1
loose_rpl_semi_sync_master_timeout = 5000 [mysqld-5.7]
innodb_buffer_pool_dump_pct = 40
innodb_page_cleaners = 4
innodb_undo_log_truncate = 1
innodb_max_undo_log_size = 2G
innodb_purge_rseg_truncate_frequency = 128
binlog_gtid_simple_recovery=1
log_timestamps=system
transaction_write_set_extraction=MURMUR32
show_compatibility_56=on

几个重要的参数配置和说明:

  • innodb_log_file_size = 4G :做实验可以更改的小点,线上环境推荐用 4G,以前 5.5 和 5.1 等版本之所以官方给的值很小,是因为太大后有 bug,现在 bug 已经修复。

  • innodb_undo_logs = 128innodb_undo_tablespaces = 3 建议在安装之前就确定好该值,后续修改比较麻烦。

  • [mysqld][mysqld-5.7]这种 tag 表明了下面的配置在什么版本下才生效,[mysqld]下均生效。

  • autocommit,这个参数在 5.5.x 以后才有,安装 5.6.x 的时候要注意先把该参数注释掉,等安装完成后,再行打开, 5.7.X 无需预先注释。

  • datadir, innodb_log_group_home_dir, innodb_undo_directory 一定要注意他的权限是 mysql:mysql


每天用心记录一点点。内容也许不重要,但习惯很重要!

MySQL 系列(一)安装的更多相关文章

  1. MySQL系列--1.安装卸载与用户权限管理

    MySQL安装 1.Ubuntu18下安装MySQL sudo apt-get install mysql-server MySQL的版本为5.7.25 2.登录MySQL 采用mysql-serve ...

  2. MySQL系列-第一章节:MySQL介绍与安装

    1.数据库介绍 1.1.什么是数据库`<Database>` 简单说存放数据的仓库,这个仓库按照一定的数据结构<数据结构是指数据的组织形式或数据之间的联系>来组织.存储的,我们 ...

  3. mysql系列安装

    Mysql的5种安装方法:1.yum/rpm安装(适合要求不高,并发不大,公司内部,企业内部一些应用场景)2.编译安装(在线高并发业务)3.二进制安装(编译安装后,使用自带工具打包,然后拷贝到相同平台 ...

  4. MySQL 系列(四)主从复制、备份恢复方案生产环境实战

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  5. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  6. MySQL 系列(二) 你不知道的数据库操作

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 本章内容: 查看\创建\使用\删除 数据库 用户管理及授权实战 局域网 ...

  7. MySQL 系列(五) 多实例、高可用生产环境实战

    MySQL 系列(五) 多实例.高可用生产环境实战   第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 史上最屌.你不知道的数据库操作 第三 ...

  8. 屌炸天实战 MySQL 系列教程(二) 史上最屌、你不知道的数据库操作

    此篇写MySQL中最基础,也是最重要的操作! 第一篇:屌炸天实战 MySQL 系列教程(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:屌炸天实战 MySQL 系列教程(二) 史上最屌.你不 ...

  9. mysql、mariadb安装和多实例配置

    本文目录:1. mysql单实例安装 1.1 rpm安装mysql 1.2 通用二进制包安装mysql 1.2.1 初始化数据库 1.2.2 安装后的规范化操作 1.3 编译安装 1.3.1 编译安装 ...

随机推荐

  1. mySQL遇到的问题

    学习mySQL遇到以下错误. 仔细检查才发现,是字段不一样. 所以插入数据,应该一一对应.

  2. 关于WPS查看PDF文件操作问题

    自己一直使用WPS打开PDF类的文档,但是使用过程中,存在下面的几个问题: pdf 如何查看当前页码pdf 如何根据目录跳转到指定页WPS 查看pdf 如何跳转到指定页 后来百度后,可以考虑将PDF转 ...

  3. DB2 57016报错的解决办法(表状态不正常,导致表无法操作)

    新建了一张表,删除了一列,然后执行insert的时候,报错 57016,解释为:因为表不活动. 1.执行db2 "load query table <tabname>" ...

  4. ORM之查询

    一.对象查询 1.正向查询 ret1=models.Book.objects.first() print(ret1.title) print(ret1.price) print(ret1.publis ...

  5. WAS 常见报错

    1) An error occurred while deleting the server. ADMG0011E: An unexpected exception occurred com.ibm. ...

  6. rear

    rear - 必应词典 美[rɪr]英[rɪə(r)] v.抚养:养育:饲养:培养 n.屁股:后部:臀部 adj.后面的:后部的 网络背面:后方:后轮 变形过去分词:reared:现在分词:reari ...

  7. Codeforces Beta Round #57 (Div. 2)

    Codeforces Beta Round #57 (Div. 2) http://codeforces.com/contest/61 A #include<bits/stdc++.h> ...

  8. 转Genymetion

    http://www.cnblogs.com/rainboy2010/p/6387770.html 介绍 Genymotion是一款出色的跨平台的Android模拟器,具有容易安装和使用.运行速度快的 ...

  9. HDU 6118 度度熊的交易计划(最小费用最大流)

    Problem Description度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题: 喵哈哈村以及周围的村庄可以看做是一共由n个片区,m条公路组成的地区. 由于生产能力的区别,第i个 ...

  10. c++ sizeof,strlen, length

    #include <map>#include <iostream>#include <algorithm>#include <functional>#i ...