linux下的mysql安装
写在开头的小故事:
很久以前小石头我在一家公司做运维工程师,当时我们有一台认证服务器安装了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安装的更多相关文章
- Linux下的Mysql安装 & 配置
Hive的数据,是存在HDFS里的.此外,hive有哪些数据库,每个数据库有哪些表,这样的信息称之为hive的元数据信息. 元数据信息不存在HDFS里.而是存在关系型数据库里,hive默认用的是der ...
- (0)linux下的Mysql安装与基本使用(编译安装)
一.大致操作步骤 环境介绍: OS:center OS6.5 mysql:5.6版本 1.关闭防火墙 查看防火墙状态:service iptables status 这样就意味着没有关闭. 运行以下命 ...
- linux 下配置mysql区分大小写(不区分可能出现找不到表的情况)怎么样使用yum来安装mysql
Linux 默认情况下,数据库是区分大小写的:因此,要将mysql设置成不区分大小写 在my.cof 设置 lower_case_table_names=1(1忽略大小写,0区分大小写) 检查方式:在 ...
- 在Windows下使用Navicat连接Linux下的MySql
Linux下的Mysql安装可以参考菜鸟教程:https://www.runoob.com/mysql/mysql-install.html 安装完成后你会发现用Navicat链接MySql会失败,这 ...
- Linux下查看mysql、apache是否安装,安装,卸载等操作
Linux下查看mysql.apache是否安装,并卸载. 指令 ps -ef|grep mysql 得出结果 root ? :: /bin/sh /usr/ ...
- linux下使用yum安装mysql、tomcat、httpd
一.linux下使用yum安装mysql 1.安装 查看有没有安装过: yum list installed mysql* rpm -qa | grep m ...
- Linux下查看MySQL的安装路径
Linux下查看mysql.apache是否安装,并卸载. 指令 ps -ef|grep mysql 得出结果 root ? :: /bin/sh /usr/ ...
- [mysql] linux下使用yum安装mysql
From: http://www.2cto.com/database/201207/141878.html linux下使用yum安装mysql 1.安装 查看有没有安装过: ...
- centOS Linux下用yum安装mysql
centOS Linux下用yum安装mysql 第一篇:安装和配置MySQL 第一步:安装MySQL [root@192 local]# yum -y install mysql- ...
随机推荐
- 前端的UI设计与交互之文案篇
在界面中,我们需要通过对话的方式与用户产生共鸣.精准.清晰的语言会更容易让用户理解,合适的语气更容易让用户建立信任感.因此在界面设计时,文案也应当被重视. 在使用和书写文案时有以下几点需要注意:从用户 ...
- 【Python】 MySQLdb的安装与使用
MySQLdb MySQLdb是一款较为底层的,python连接mysql用的模块.和更加高级的,提供ORM的模块不同,MySQLdb主要还是聚焦于如何和数据库进行连接和进行基本的操作,操作的体现形式 ...
- 听翁恺老师mooc笔记(8)--字符串2
字符串的赋值 字符串的输入与输出 对C语言的基础类型,比如int.double等类型,scanf.printf有专门的格式转换,而对字符串,scanf.printf使用%s格式字符进行输入与输出.当使 ...
- 从0开始的LeetCode生活—001-Two Sum
题目: Given an array of integers, return indices of the two numbers such that they add up to a specifi ...
- JavaScript 相关知识
一.数组 var a = [1,2,3,4]; console.log(a.length); a.push(5); console.log(a); // [1, 2, 3, 4, 5] var r ...
- 【iOS】swift 74个Swift标准库函数
本文译自 Swift Standard Library: Documented and undocumented built-in functions in the Swift standard li ...
- 《高级软件测试》11.14.安装和运行Jira
今日任务完成情况如下: 小段:研究Jira在Linux的安装教程 小费:尝试在Ubuntu下安装Jira 小高:查阅了关于Jira软件的介绍和安装教程,下载准备明天安装,并学习使用 小王:注册Jira ...
- jsMath对象
Math对象: abs.用来求绝对值. ceil:用来向上取整. floor:用来向下取整. round:用来四舍五入取近似值. sqrt:用来开方. pow:括号内有2位参数.如pow(2,5)表示 ...
- ORA-00379 缓冲池 DEFAULT 中无法提供 32K 块大小的空闲缓冲区
(一)问题 今天在使用Pl/sql developer查看表空间大小的时候,报错误:ORA-00379 缓冲池 DEFAULT 中无法提供 32K 块大小的空闲缓冲区,具体如下图: SQL> s ...
- Redux应用单一的store原则案例详解
在开发reac单页面应用的时候,页面的展示逻辑跟数据状态的关系管理变得越来越复杂,redux很好的解决这个问题.废话不多说,直接先上官网api链接. http://cn.redux.js.org/in ...