首先安装依赖包,避免在安装过程中出现问题
[root@]# yum -y install gcc gcc-c++ [root@]# yum -y install cmake [root@]# yum -y install ncurses-devel [root@# yum -y install autoconf [root@]# yum -y install perl perl-devel 上面的依赖包安装也可以一行搞定
[root@]# yum -y install gcc gcc-c++ cmake ncurses-devel autoconf perl perl-devel
mysql源码下载地址:https://dev.mysql.com/downloads/mysql/5.6.html#downloads
源码包地址:https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.35.tar.gz
创建mysql安装目录以及数据存放目录
[root@]# mkdir /usr/local/mysql [root@]# mkdir /usr/local/mysql/data
mkdir创建文件夹
-m : 对新建目录设置存取权限
-p : 此时若路径中的某些目录尚不存在,系统将自动建立好那些尚不存在的目录
创建用户、用户组
[root@]# groupadd mysql [root@]# useradd -r -g mysql mysql
useradd命令用来建立用户帐号和创建用户的起始目录,该命令使用权限是终极用户。新建用户密码为空
-g : 指定用户所属的起始群组。
-d : 指定用户登入时的启始目录。
-s : 指定用户登入后所使用的shell。-s /sbin/nologin 是不让登录shell
-g后第一个mysql是组名,第二个mysql是新建的用户名,新建用户信息可在/etc/passwd文件中查到
解压缩文件到当前文件夹
tar备份,压缩与解压缩,Linux命令,也是一个工具
-z : 表示 tar 包是被 gzip 压缩过的,所以解压时需要用 gunzip 解压
-x : 从 tar 包中把文件提取出来
-v : 显示详细信息
-f xxx.tar.gz : 指定被处理的文件是 xxx.tar.gz
tar.gz的用tar zxvf解压,tar.bz2的用tar jxvf解压
开始安装
[code] [root@]# tar -zxvf mysql-5.6.35.tar.gz [root@]# cd mysql-5.6.35 [root@ mysql-5.6.35]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DINSTALL_DATADIR=/usr/local/mysql/data \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DEXTRA_CHARSETS=all \ -DENABLED_LOCAL_INFILE=1
[root@ mysql-5.6.35]# make install CMAKE参数说明:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql //默认安装目录
-DINSTALL_DATADIR=/usr/local/mysql/data //数据库存放目录
-DDEFAULT_CHARSET=utf8 //使用utf8字符
-DDEFAULT_COLLATION=utf8_general_ci //校验字符
-DEXTRA_CHARSETS=all //安装所有扩展字符集
-DENABLED_LOCAL_INFILE=1 //允许从本地导入数据
-DMYSQL_USER=mysql
-DMYSQL_TCP_PORT=3306
CMAKE详细配置请参照mysql官网
注意事项:
如安装失败重新编译时,需要清除旧的对象文件和缓存信息。
[root@ mysql-5.6.35]# make clean [root@ mysql-5.6.35]# rm -f CMakeCache.txt [root@ mysql-5.6.35]# rm -rf /etc/my.cnf
设置目录权限
[root@]# cd /usr/local/mysql [root@ mysql]# chown -R mysql:mysql . [root@ mysql]# chown -R mysql:mysql data
chown 命令 更改某个文件或目录的属主和属组。
-R : 递归式地改变指定目录及其下的所有子目录和文件的拥有者。
-v : 显示chown命令所做的工作。
将mysql的启动服务添加到系统服务中
[root@]# cd /usr/local/mysql [root@ mysql]# cp support-files/my-default.cnf /etc/my.cnf
创建基础表:
[root@]# cd /usr/local/mysql [root@ mysql]# ./scripts/mysql_install_db --user=mysql
配置环境变量
[root@]# vi /etc/profile
在最下面添加下面两个值
export MYSQL_HOME="/usr/local/mysql" export PATH="$PATH:$MYSQL_HOME/bin"
export MYSQL_HOME=/usr/local/mysql export PATH=$PATH:$MYSQL_HOME/bin
然后保存
让修改的profile文件立即生效
[root@]# source /etc/profile
将mysql加入到可控制启动的服务的文件夹内,并命名mysql,即service可控制的服务名,至此可用service mysql start控制启动mysql
/etc/init.d 是/etc/rc.d/init.d的链接,在/etc/init.d添加一个文件会同步在/etc/rc.d/init.d下添加一个相同文件
[root@]# cd /usr/local/mysql/ [root@mysql]# cp support-files/mysql.server /etc/init.d/mysql
chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接
--add : 加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。服务脚本必须存放在/etc/ini.d/目录下
让mysql服务加入到开机启动指令管理的服务列表中
[root@]# chkconfig --add mysql 开机自启动mysql服务
on : 针对的服务有等级限制,具体查询chkconfig详细
[root@]# chkconfig mysql on
修改MySQL配置:
vi /etc/my.cnf
[mysqld] basedir=/usr/local/mysql datadir=/usr/local/mysql/data port=3306 server_id=1 socket=/tmp/mysql.sock
现在可以使用下面的命令启动mysql
[root@]# service mysql start
如果保错:mysqld_safe error: log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Create writable for user 'mysql'. => 解决: /etc/my.cnf [mysqld_safe] log-error=/var/log/mysql/mysql.log pid-file=/var/run/mysql/mysql.pid
停止mysql服务
[root@]# service mysql stop 重启mysql服务
[root@]# service mysql restart
下面两种命令作用相同
systemctl [stop|start|restart] 服务名
service 服务名 [stop|start|restart]
回车在接下来的提示中设置新密码即可
[root@]# mysqladmin -u root password New password: Confirm new password: [root@bogon liuzhen]#
连接到mysql 报错: Starting MySQL.170625 14:18:5ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 解决: /etc/my.cnf socket=/tmp/mysql.sock
[root@ mysql]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.6.35 Source distribution
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
修改root密码: mysql>use mysql; mysql>UPDATE user SET password=PASSWORD("yqlt@0824") WHERE user='root'; 刷新权限 mysql>FLUSH PRIVILEGES; 退出mysql mysql>exit;
新建用户和授权 -- 选择mysql数据库 use mysql; -- 创建本地用户 create user 'superboy'@'localhost' identified by 'iamsuperboy'; -- 刷新MySQL的系统权限相关表,使添加用户操作生效,以免会出现拒绝访问
GRANT SElECT ON *.* TO 'wubingguang'@'%' IDENTIFIED BY "123456" FLUSH PRIVILEGES;
username:用户名 localhost:本机访问;远程访问:% password:密码 刷新权限: FLUSH PRIVILEGES;
新建用户只读权限:(GRANT SElECT ON 数据库名.表名 TO 'wubingguang'@'%' IDENTIFIED BY "123456";) GRANT SElECT ON cheyidai.* TO 'cheyidai'@'%' IDENTIFIED BY "cheyidai"; FLUSH PRIVILEGES;
create database cheyidai DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create user 'cheyidai'@'%' identified by 'cheyidai'; GRANT all ON cheyidai.* TO 'cheyidai'@'%' IDENTIFIED BY "cheyidai"; FLUSH PRIVILEGES;
修改密码: mysql>UPDATE user SET password=PASSWORD("root") WHERE user='wubingguang'; flush privileges;
防火墙端口开放: [root@ /]# firewall-cmd --zone=public --add-port=3306/tcp --permanent 重启防火墙 [root@ /]# firewall-cmd --reload
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
<-- mysql> mysql -u root -p
mysql>use mysql;
mysql>update user set host =’%' where user =’root’; mysql>flush privileges; -->
为root添加远程连接的能力
mysql>use mysql; mysql>desc user; mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "root"; //为root添加远程连接的能力。
mysql>select Host,User,Password from user where User='root'; mysql>flush privileges; //刷新权限 mysql>exit //退出
以下其余四个GRANT例子
给来自192.168.155.1的用户user1分配可对数据库dbname的tablename表进行SELECT,INSERT,UPDATE,DELETE,CREATE,DROP等操作的权限,并设定密码为123456。
对表操作权限还有好多如ALTER等
mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON dbname.tablename TO 'user1'@'192.168.155.1' IDENTIFIED BY '123456'; 给来自192.168.155.1的用户user2分配可对数据库dbname所有表进行所有操作的权限,并设定口令为123456。
mysql>GRANT ALL PRIVILEGES ON dbname.* TO 'user2'@'192.168.155.1' IDENTIFIED BY '123456'; 给来自192.168.155.1的用户user3分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123456。
mysql>GRANT ALL PRIVILEGES ON *.* TO 'user3'@'192.168.155.1' IDENTIFIED BY '123456'; 给本机用户user4分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123456。
mysql>GRANT ALL PRIVILEGES ON *.* TO 'user4'@'localhost' IDENTIFIED BY '123456';
开启防火墙mysql3306端口的外部访问
CentOS升级到7之后,使用firewalld代替了原来的iptables。下面记录如何使用firewalld开放Linux端口
--zone : 作用域,网络区域定义了网络连接的可信等级。这是一个一对多的关系,这意味着一次连接可以仅仅是一个区域的一部分,而一个区域可以用于很多连接
--add-port : 添加端口与通信协议,格式为:端口/通讯协议,协议是tcp 或 udp
--permanent : 永久生效,没有此参数系统重启后端口访问失效
[root@ /]# firewall-cmd --zone=public --add-port=3306/tcp --permanent 重启防火墙
[root@ /]# firewall-cmd --reload -----------------------------------------------------------------------
忘记root密码后,如何更改密码
停止mysql服务,或者命令systemctl stop mysql
[root@ /]# service mysql stop 进入/usr/local/mysql
[root@ /]# cd /usr/local/mysql/ 通过mysqld_safe启动mysql,并且启动mysql时不启动grant-tables授权表
[root@ mysql]# ./bin/mysqld_safe --basedir=/usr/local/mysql \ --datadir=/usr/local/mysql/var \ --skip-grant-tables & 登陆mysql
update user set host =’%'where user =’root’; FLUSH PRIVILEGES;
[root@ /]# mysql -u root mysql 修改root密码
mysql>UPDATE user SET password=PASSWORD("root") WHERE user='root'; 刷新权限
mysql>FLUSH PRIVILEGES; 退出mysql
mysql>exit;
=============mysql多实例 1,安装好mysql 安装依赖的包 1,安装好mysql安装依赖包
yum install ncurses-devel -y yum install libaio-devel -y
2,kill 掉之前单实例mysql pkill mysqld
//ps -ef|grep mysql
3,干掉之前启动命令 rm -f /etc/init.d/mysqld
4.创建数据目录 mkdir -p /data/{3306,3307}/data 5,分别拷贝my.cnf 到/data/3306 和/data/3307 6,修改my.cnf 7.授权mysql用户管理/data chown -R mysql:mysql /data
touch /data/3306/mysql_user3306.err touch /data/3307/mysql_user3307.err
chown -R mysql:mysql /data/3306/mysql_user3306.err chown -R mysql:mysql /data/3307/mysql_user3307.err
脚本原理: 启动: mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 >/dev/null & mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 >/dev/null & 停止: mysqladmin -u root root -S /data/3306/mysql.sock shutdown mysqladmin -u root root -S /data/3307/mysql.sock shutdown
脚本:看mysql 查看mysql格式 vi mysql :set ff? 设为unix格式 :set fileformat=unix //设为dos格式 //:set fileformat=dos
授权可执行: find /data/ -type f -name "mysql"|xargs chmod +x find /data/ -type f -name "mysql"|xargs ls -l
9,初始化数据库 cd /usr/local/mysql/scripts 1、3306数据库初始化 ./mysql_install_db --defaults-file=/data/3306/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data
2、3307数据库初始化
./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data
10,启动mysql /data/3306/mysql start /data/3307/mysql start /data/3306/mysql stop /data/3307/mysql stop /data/3306/mysql restart /data/3307/mysql restart
netstat -lntup|grep 330[6-7]
七、多实例本地及远程登陆
1、本地登陆,一定要添加sock区别不同实例
mysql -S /data/3306/mysql.sock use mysql UPDATE user SET password=PASSWORD("root") WHERE user='root'; flush privileges; exit;
2、远程登陆,与普通mysql连接一样,需要授权
mysql –uroot –p123456 –h 192.168.31.200 –P 3307
八、多实例修改口令
1、非交互式修改口令
mysqladmin –uroot –p123456 password=’newpass’ –S/data/3306/data/mysql.sock
2、root帐户连接到mysql,执行:
mysql>set passwordfor root@’192.168.31.%’=password(‘newpass’);
3、直接修改mysql.user表来实现:
mysql>update userset password=password('newpass') where host="192.168.31.%" and user="root"; mysql>flush privileges;
多实例内存不够错误:
2017-09-18 21:01:29 752 [Note] InnoDB: Initializing buffer pool, size = 20.0M InnoDB: mmap(21463040 bytes) failed; errno 12 2017-09-18 21:01:29 752 [ERROR] InnoDB: Cannot allocate memory for the buffer pool 2017-09-18 21:01:29 752 [ERROR] Plugin 'InnoDB' init function returned error. 2017-09-18 21:01:29 752 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 2017-09-18 21:01:29 752 [ERROR] Unknown/unsupported storage engine: InnoDB 2017-09-18 21:01:29 752 [ERROR] Aborting
如果把my.cnf innodb_buffer_pool_size调低还报错的话 1,http://blog.csdn.net/shaochenshuo/article/details/53465016 cat /proc/sys/vm/overcommit_memory
2, 有人说是swap分区为0导致的此错误,使用free -m命令查看系统内存,发现swap确实为0。使用如下命令建立一个临时的swap分区: #先查看下交换空间大小 cat /proc/meminfo |grep Swap SwapCached: 0 kB SwapTotal: 0 kB SwapFree: 0 kB
1.添加交换文件(大小为:2G) dd if=/dev/zero of=/data/swap bs=1024 count=2048000
2048000+0 records in 2048000+0 records out 2097152000 bytes (2.1 GB) copied, 39.6776 s, 52.9 MB/s
2.创建交换空间
mkswap /data/swap
mkswap: /data/swap: warning: don’t erase bootbits sectors on whole disk. Use -f to force. Setting up swapspace version 1, size = 2047996 KiB no label, UUID=a0907c3c-ba0f-4c11-90d6-5b53ec5b861
3.启动交换空间 swapon /data/swap
4.增加到fstab里面 vim /etc/fstab /data/swap swap swap defaults 0 0 mount -a
#查看交换空间大小 cat /proc/meminfo |grep Swap SwapCached: 0 kB SwapTotal: 2047992 kB SwapFree: 2047992 kB
列出所有的系统服务: chkconfig --list
chkconfig --list #列出所有的系统服务。 chkconfig --add httpd #增加httpd服务。 chkconfig --del httpd #删除httpd服务。 chkconfig --level httpd 2345 on #设置httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态。 chkconfig --list #列出系统所有的服务启动情况。 chkconfig --list mysqld #列出mysqld服务设置情况。 chkconfig --level 35 mysqld on #设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动,off表示关闭。 chkconfig mysqld on #设定mysqld在各等级为on,“各等级”包括2、3、4、5等级。
等级0表示:表示关机 等级1表示:单用户模式 等级2表示:无网络连接的多用户命令行模式 等级3表示:有网络连接的多用户命令行模式 等级4表示:不可用 等级5表示:带图形界面的多用户模式 等级6表示:重新启动