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. sqlserver存储过程中调用存储过程

    declare @value1 varchar(100)declare @value2 int exec xx.dbo.xxxxx 'param1', 'param2', 'param3', @val ...

  2. DRF的视图和路由

    DRF的视图 APIView Django中写CBV的时候继承的是View,rest_framework继承的是APIView, urlpatterns = [ url(r'^book$', Book ...

  3. jquery 事件委托(利用冒泡)

    将事件绑定在父元素上,格式$(父元素).on("事件名称","子元素选择器",function(方法体){}) <!DOCTYPE html> &l ...

  4. [剑指Offer]判断一棵树为平衡二叉树(递归)

    题目链接 https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId=0&tqId=0&rp=2&a ...

  5. SSM提交了事物但数据库不执行

    从图中可以看到,spring已经给出事物提交成功,但数据库并未插入数据,找了老半天发现,数据库表上我加了个触发器,触发器执行失败造成没有数据库commit.但程序没什么不报异常吗?

  6. linux命令学习之:wc

    wc(Word Count)命令用来计算数字.利用wc指令我们可以计算文件的Byte数.字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据. 命令格式 wc ...

  7. 微信小程序基础架构

    一个微信小程序界面由一个页面描述文件,一个页面逻辑文件,一个样式表文件来进行描述 在主目录中的三个以app开头的文件就是微信小程序的主描述文件 app.js :主逻辑文件,用来注册小程序 app.js ...

  8. vue总结2

    1. 给router-link添加事件 之前用v-link 现在用 router-link 添加事件要用原生的.native修饰v-on <my-component v-on:click.nat ...

  9. 配置go语言编辑环境 - goland

    快捷键: 移动行 Alt + Shift + up/down 行内(选中)移动(到头尾/删除) Ctrl(Shift) + left/rignt(Home/End/Backspace) 插入新行 Sh ...

  10. c# ?. 空值传播运算符

    当左侧为空时不执行右侧代码,避免出现为null的错误,同时也避免了判断是否为null,可以和??一起连用,省了好多事.举例如下: 以前:var res=obj==null?5:obj.a; 现在:va ...