写在开头的小故事:

很久以前小石头我在一家公司做运维工程师,当时我们有一台认证服务器安装了mysql5.5版本。有一天领导说防止它挂掉,做个主从复制吧,我开心的接受任务,但是让某同事听到了,

此同事代号x,小x上来就是一波跟我装x,跟我说我们还要用5.5版本的,5.5是最好的版本,安装一定要用源码安装,这样性能才是最佳的,还有一堆blablabla..........

总之我感觉没一句是完全对的,我得出的结论是:You can you up , No can no bb................

下面我来写我是怎么安装mysql的,如果有哪些不对,欢迎指出。

step1:

下载mysql的安装包,那么就有几个问题了,如下:

下载什么平台的mysql?

答:Linux版本,不管是centos还是debian我们都用Linux - Generic,也就是Linux上的通用版本。

用什么版本号的mysql?

答:5.5其实老了,有很多问题,尽量用新一点的,用5.6或5.7都行。

源码安装还是用官方编译好的包?

答:都说源码安装定制度高,性能好,那我想问问你,你要定制哪些东西?性能提高多少?你不知道的话还是用官方编译好的二进制包吧。

不过听说intel有个很好的c++编译器,真的能提高性能,但是付费的,没用过。。。

去哪里下载mysql?

答:肯定是官网上,别在百度上乱找,官网地址:https://dev.mysql.com/downloads/mysql/

我们先来安装5.6吧,我直接用wget下载,也可去官网点击下载:

wget https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz

step2:

安装过程:

shell> yum install libaio                                         #安装mysql的异步io库,用于提高mysql性能
shell> yum install autoconf                                       #不安装此包,则执行scripts/mysql_install_db --user=mysql时可能会报错
shell> mv mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz /usr/local   #把我们刚下载的包移动到/usr/local目录下
shell> tar -xf mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz         #解压包
shell> groupadd mysql                                             #创建mysql组
shell> useradd -r -g mysql -s /bin/false mysql                    #创建mysql用户并属于mysql组
shell> ln -s mysql-5.6.39-linux-glibc2.12-x86_64 mysql            #建立软件链接
shell> cd mysql
shell> scripts/mysql_install_db --user=mysql
shell> bin/mysqld_safe --user=mysql &                             #通过mysql用户启动数据库,执行后回车即可
# Next command is optional
shell> cp support-files/mysql.server /etc/init.d/mysql.server     #这步是可选的,做一下比较好,这样可以使用/etc/init.d/mysql.server start来启动服务了
shell> chkconfig --add mysql.server                               #设置mysql开机自启动
shell> echo "export PATH=/usr/local/mysql/bin:$PATH">>/etc/profile
shell> source /etc/profile #这样就可以直接打出mysql命令了,不用输入/usr/local/bin/完整路径

  

我们来验证一下是不是真的启动了:

ps aux | grep mysql

我们看到了进程号为24517的mysql进程:

通过上面使用bin/mysqld_safe --user=mysql &方式启动的mysql进程,会自动监控mysql进程状态,如果mysql进程意外死掉,则会被重新调起来:

看我们手动把它杀掉了,然后它又restart了。。。。

如果想关掉进程,执行下面命令:

mysqladmin shutdown

我们还可以用下面这种方式启动,当进程意外退出时,不会被自动调起:

bin/mysqld --user=mysql &

上面两种启动方式了解就好,最佳做法是:

shell> cp support-files/mysql.server /etc/init.d/mysql.server
shell> chkconfig --add mysql.server
shell> /etc/init.d/mysql.server start|stop|status

  

程序可以正常启动了,下面说说配置文件吧。

step3:

一个相对较优的配置文件:

[client]

[mysqld]
########basic settings########
server-id = 11
port = 3306
user = mysql
bind_address = localhost
#autocommit = 0            #使用这个配置文件进行初始化时,一定要先把这行注掉,初始化完成后,去掉注释,重启数据库生效,不然root连接不上数据库。
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

我们将使用上面的配置文件,对数据库进行重新初始化:

由于配置文件中指定了新的data目录,所以我们把原来的干掉吧!

rm -rf /usr/local/mysql/data/
mkdir /redolog
mkdir /undolog
chown -R mysql:mysql /redolog
chown -R mysql:mysql /undolog

把上面的内容写到/etc/my.cnf中,然后重新执行scripts/mysql_install_db --user=mysql初始化数据库,可以看到新的data目录已经生成了:

[root@ip-172-31-23-178 mysql]# ls /data/mysql_data/
bin.index  error.log  mysql  test

别高兴的太早!error.log里面的错误日志了解一下?

2018-04-10 09:14:20 29228 [Note] InnoDB: Initializing buffer pool, size = 6.0G
InnoDB: mmap(843055104 bytes) failed; errno 12

是的你猜的没错,我这机器硬盘一共就6G,满了。。。那先改成1G

innodb_log_file_size = 1G

如果出错了就自己看error.log具体问题具体分析,总有各种各样的问题,初始化之前把/data/mysql_data等旧文件删除,再重新初始化。

然后启动数据库:

[root@ip-172-31-23-178 mysql_data]# /etc/init.d/mysql.server start
Starting MySQL. SUCCESS!

然后把配置文件中的#autocommit = 0 去掉注释,重启数据库让此项生效。

如果初始化时没把此项注释,则你执行mysql -uroot -p是连不上数据库的,因为数据库时的user表中根本就没有生成root用户,在5.7中这个问题已经没有了。

注意:

错误日志在哪里?

答:如果不在配置文件中指定, 则在/usr/local/mysql/data下会生成相应的*.err文件。

报出data目录没有权限?

答:data目录的权限应该是mysql:mysql才对,如果之前系统安装了mysql,则会在/etc/下存在旧的配置文件my.cnf,mysql会优先读取它,所以在安装之前应该将旧的配置文件干掉,免去不必要的麻烦。

使用上面的配置文件初始化数据库,执行mysql -uroot -p登录不上?

答:上面说了,初始化之前把autocommit = 0注释掉,装完了再打开,不然是生成不了root用户的。mysql5.7版本无此问题。

linux下的mysql安装的更多相关文章

  1. Linux下的Mysql安装 & 配置

    Hive的数据,是存在HDFS里的.此外,hive有哪些数据库,每个数据库有哪些表,这样的信息称之为hive的元数据信息. 元数据信息不存在HDFS里.而是存在关系型数据库里,hive默认用的是der ...

  2. (0)linux下的Mysql安装与基本使用(编译安装)

    一.大致操作步骤 环境介绍: OS:center OS6.5 mysql:5.6版本 1.关闭防火墙 查看防火墙状态:service iptables status 这样就意味着没有关闭. 运行以下命 ...

  3. linux 下配置mysql区分大小写(不区分可能出现找不到表的情况)怎么样使用yum来安装mysql

    Linux 默认情况下,数据库是区分大小写的:因此,要将mysql设置成不区分大小写 在my.cof 设置 lower_case_table_names=1(1忽略大小写,0区分大小写) 检查方式:在 ...

  4. 在Windows下使用Navicat连接Linux下的MySql

    Linux下的Mysql安装可以参考菜鸟教程:https://www.runoob.com/mysql/mysql-install.html 安装完成后你会发现用Navicat链接MySql会失败,这 ...

  5. Linux下查看mysql、apache是否安装,安装,卸载等操作

    Linux下查看mysql.apache是否安装,并卸载. 指令 ps -ef|grep mysql 得出结果 root               ?        :: /bin/sh /usr/ ...

  6. linux下使用yum安装mysql、tomcat、httpd

    一.linux下使用yum安装mysql   1.安装 查看有没有安装过:           yum list installed mysql*           rpm -qa | grep m ...

  7. Linux下查看MySQL的安装路径

    Linux下查看mysql.apache是否安装,并卸载. 指令 ps -ef|grep mysql 得出结果 root               ?        :: /bin/sh /usr/ ...

  8. [mysql] linux下使用yum安装mysql

    From: http://www.2cto.com/database/201207/141878.html linux下使用yum安装mysql   1.安装 查看有没有安装过:           ...

  9. centOS Linux下用yum安装mysql

    centOS Linux下用yum安装mysql      第一篇:安装和配置MySQL   第一步:安装MySQL   [root@192 local]# yum -y install mysql- ...

随机推荐

  1. canvas---HTML5新特性

    画圆及填充文字<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...

  2. 关于JQuery的绑定方法

    从jQuery1.7开始,jQuery引入了全新的事件绑定机制,on()和off()两个函数统一处理事件绑定.因为在此之前有bind(), live(), delegate()等方法来处理事件绑定,j ...

  3. Dynamics 365 for CRM: Sitemap站点图的可视化编辑功能

    Dynamics 365 for CRM 提供了Sitemap站点图的可视化编辑功能 在之前的所有版本中,我们只能通过从系统中导出站点图的XML进行编辑后再导入(容易出错),或使用第三方的Sitema ...

  4. hibernate框架学习笔记9:多对多关系案例

    员工与角色案例: 一个员工可以是多种角色(总监,经理),一种角色可以是多个员工(保洁) 这里发现无法使用外键表达关系,多对多总是创建第三张表来维护关系 这张表至少两列,都是外键,分别引用两张表的主键 ...

  5. ES5和ES6两个值的比较

    ES5比较两个值是否相等 1)相等运算符 (==):比较两个数值是否相等,自动转换类型后再进行比较 2)全等运算符(===):比较两个比较值的数值和类型是否相等 ES5的特殊: ES6提出" ...

  6. 高级软件工程2017第7次作业--团队项目:Beta阶段综合报告

    Deadline:2017-11-06(周一) 21:00pm (注:以下内容参考集大作业8 集大作业9 集大作业10 ) 0.评分规则: 按时交 - 有分,内容包括以下5个方面: Beta阶段敏捷冲 ...

  7. UserControl 用户定义组件

    <pages> <namespaces> <add namespace="System.Web.Optimization" /> </na ...

  8. 《Language Implementation Patterns》之访问&重写语法树

    每个编程的人都学习过树遍历算法,但是AST的遍历并不是开始想象的那么简单.有几个因素会影响遍历算法:1)是否拥有节点的源码:2)是否子节点的访问方式是统一的:3)ast是homogeneous或het ...

  9. Linux进程间通信--信号量

    信号量绝对不同于信号,一定要分清,关于信号,上一篇博客中已经说过,如有疑问,请移驾! 信号量 一.是什么   信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件 ...

  10. bzoj千题计划113:bzoj1023: [SHOI2008]cactus仙人掌图

    http://www.lydsy.com/JudgeOnline/problem.php?id=1023 dp[x] 表示以x为端点的最长链 子节点与x不在同一个环上,那就是两条最长半链长度 子节点与 ...