002:MySQL升级以及访问连接
一. 数据库升级
1. 环境说明:
一般说来,MySQL数据库的二进制数据文件,也就是my.cnf
中的配置项datadir
所在的位置,和我们MySQL应用程序安装的位置是需要分开的,仅仅通过配置项告诉MySQL,数据库的数据存在datadir
这个目录下。当程序
和数据分离
以后,方便我们对数据库应用程序
做版本的升级
或者回退
。
2. 环境举例:
MySQL安装目录:
- MySQL 5.6.27: /usr/local/mysql-5.6.27-linux-glibc2.5-x86_64
- MySQL 5.7.18 : /usr/local/mysql-5.7.18-linux-glibc2.5-x86_64
datadir目录:
- /r2/mysqdata/
初始环境:
shell> ll /usr/local/
lrwxrwxrwx 1 root root 34 Nov 16 11:30 mysql -> mysql-5.6.27-linux-glibc2.5-x86_64
lrwxrwxrwx 1 root root 46 Nov 22 22:56 mysql-5.6.27-linux-glibc2.5-x86_64
drwxr-xr-x 9 root root 120 Nov 22 22:54 mysql-5.7.18-linux-glibc2.5-x86_64
shell> ll /r2/mysqldata/
-- 1 mysql mysql 259234780 11月 22 11:40 binlog.000269
-rw-r----- 1 mysql mysql 1007 11月 19 13:06 binlog.index
-rw-r----- 1 mysql mysql 2274867 11月 22 14:53 error.log
-rw-r----- 1 mysql mysql 4676173 11月 19 10:57 ib_buffer_pool
-rw-r----- 1 mysql mysql 3087007744 11月 22 14:12 ibdata1
-rw-r----- 1 mysql mysql 2147483648 11月 22 14:12 ib_logfile0
-rw-r----- 1 mysql mysql 2147483648 11月 22 14:12 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 11月 22 16:11 ibtmp1
drwxr-x--- 2 mysql mysql 4096 11月 14 17:59 mysql
-rw-r----- 1 mysql mysql 6 11月 19 12:29 mysqldb.pid
srwxrwxrwx 1 mysql mysql 0 11月 19 12:29 mysql.sock
-rw------- 1 mysql mysql 6 11月 19 12:29 mysql.sock.lock
drwxr-x--- 2 mysql mysql 4096 11月 14 17:59 performance_schema
drwxr-x--- 2 mysql mysql 4096 11月 19 13:19 sbtest
-rw-r----- 1 mysql mysql 5930475516 11月 19 13:07 slow.log
drwxr-x--- 2 mysql mysql 12288 11月 14 17:59 sys
drwxr-x--- 2 mysql mysql 4096 11月 17 08:58 sysbench
3. 版本升级
shell> /etc/init.d/mysqld stop #安全的停止数据库的运行
shell> cd /usr/local/
shell> unlink mysql
shell> ln -s mysql-5.7.18-linux-glibc2.5-x86_64 mysql
#此时,MySQL的应用程序版本已经升级完成
#/etc/init.d/mysqld
#/etc/profile中PATH增加的/usr/local/mysql/bin
#都不需要做任何的改变,即可将当前系统的mysql版本升级完成
#注意:此时只是应用程序升级完成,系统表仍然还是5.6的版本
shell> cd /usr/local/mysql
shell> chown root.mysql . -R
#5.7.x -> 5.6.X 降级存在问题,这里暂且注释掉
#shell> cp -r /data/mysql_data/mysql /你的备份路径/mysql_5_6_27.backup
#该步骤将mysql5.6.27版本的系统表进行了备份,以便将来可以回退
shell> /etc/init.d/mysqld start
#此时 /etc/init.d/mysqld start # 可以启动
# 且可以使用 mysql -u root -p (原密码) 进入数据库
# show databases;存在test表,而没有sys表(数据的二进制文件兼容)
# 但是如果去看error.log会发现好多的WARNNING
# 所以,这个时候我们要去 upgrade 去升级
shell> mysql_upgrade -p -s
#参数 -s 一定要加,表示只更新系统表,-s: upgrade-system-tables
#如果不加-s,则会把所有库的表以5.7.18的方式重建,线上千万别这样操作
#因为数据库二进制文件是兼容的,无需升级
#什么时候不需要-s ? 当一些老的版本的存储格式需要新的特性,
#来提升性能时,不加-s
#即使通过slave进行升级,也推荐使用该方式升级,速度比较快
Enter password:
The --upgrade-system-tables option was used, databases wont be touched.
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Upgrading the sys schema.
Upgrade process completed successfully.
Checking if update is needed.
shell> mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 232942
Server version: 5.7.18-log MySQL Community Server (GPL)
Copyright (c) 2000, 2013, 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.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql | # 这个就是升级后的系统库,如果回退,将备份的拷贝回来覆盖即可
| performance_schema |
| sys | # 5.7 新的sys库
| test | # 5.6 中的test库
+--------------------+
5 rows in set (0.00 sec)
MySQL
5.1.X
、5.5.X
、5.6.X
是可以直接通过该方式升级到5.7.X
。但是5.0.X
未知,需要测试
注意:
如果原来datadir
是/data/mysqldata
,要确保my.cnf
中的数据位置和升级前后的实际数据位置是一致的。
4.关于降级问题的说明
通过覆盖mysql
系统表的方式存在问题,会导致启动不起来。官方建议如下:
官方MySQL5.7降级建议
上述建议中使用的SQL语句可在mysql5.7
的源码的srcipts/mysql_system_tables_fix_for_downgrade.sql
中找到,或者直接运行这个sql脚本。
测试后发现,有bug; 可以启动,但是原来的用户表,无法访问。
二. MySQL的连接登录
1. 几种登录方式
方式一
mysql -p
- 该方法默认使用root用户, 可使用
select user();
查看当前用户
- 该方法默认使用root用户, 可使用
方式二
mysql -S /tmp/mysql.sock -u root -p
密码A- 该方法适用于在安装MySQL主机上进行本地登录
方式三
mysql -h 127.0.0.1 -u root -p
密码B- 使用
'root'@'127.0.0.1'
这个用户登录
- 使用
方式四
mysql -h localhost -u root -p
密码A- 该方式等价与【方式二】,且和【方式三】属于两个不同的“用户”
2. 免密码登录
- 方式一
my.cnf
增加[client]
标签
[client]
user="root"
password="你的密码"
#单对定义不同的客户端
[mysql] # 这个是给/usr/loca/mysql/bin/mysql 使用的
user=root
password="你的密码"
[mysqladmin] # 这个是给/usr/local/mysql/bin/mysqladmin使用的
user=root
password="你的密码"
每个不同的客户端需要定义不同的标签,使用[client]
可以统一
- 方式二
login-path
shell> mysql_config_editor set -G vm1 -u root -p
Enter password [输入root的密码]
shell> mysql_config_editor print --all
[vm1]
user=root
password=*****
socket=/tmp/mysql.sock
#login
shell> mysql --login-path=vm1 # 这样登录就不需要密码,且文件二进制存储 ,位置是 ~/.mylogin.cnf
该方式相对安全。如果server被黑了,该二进制文件还是会被破解
- 方式三
~/.my.cnf
, 自己当前家目录
#Filename: ~/.my.cnf
[client]
user="root"
password="你的密码"
三. MySQL 参数介绍和设置
1. 参数的分类
- 全局参数:GLOBAL
- 可修改参数
- 不可修改参数
- 会话参数:SESSION
- 可修改参数
- 不可修改参数
1: 用户可在线修改
非只读参数
,只读参数
只能预先在配置文件中进行设置,通过重启数据库实例,方可生效。
2: 所有的在线修改过的参数(GLOBAL/SESSION),在重启后,都会丢失,不会写如
my.cnf
,无法将修改进行持久化
3: 有些参数,即存在于
GLOBAL
又存在于SESSION
, 比如autocommit
(PS:MySQL默认是提交的)
2. 查看参数
mysql> show variables; # 显示当前mysql的所有参数,且无隐藏参数
mysql> show variables like "max_%"; #查以max_开头的变量
3. 设置参数
- 设置全局(GLOBAL)参数
mysql> set global slow_query_log = off; #不加global,会提示错误,slow_query_log是全局参数
mysql> set slow_query_log = off; # 下面就报错了,默认是会话参数
ERROR 1229 (HY000): Variable 'slow_query_log' is a GLOBAL variable and should be set with SET GLOBAL
- 设置会话(SESSION)参数
mysql> set autocommit = 0; # 当前会话生效
# 或者
mysql> set session autocommit = 0; # 当前会话生效
autocommit
同样在GLOBAL
中, 也有同样的参数
mysql> set global autocommit = 1; #当前实例,全局生效
注意:如果这个时候/etc/init.d/mysqld restart, 则全局的autocommit的值会变成默认值,或者依赖于my.cnf的设置值。
执行的效果如下:
mysql> show variables like "slow%"; # 原值为ON
+---------------------+----------+
| Variable_name | Value |
+---------------------+----------+
| slow_launch_time | 2 |
| slow_query_log | OFF |
| slow_query_log_file | slow.log |
+---------------------+----------+
3 rows in set (0.00 sec)
mysql> select @@session.autocommit; # 等价于 slect @@autocomit;
+----------------------+
| @@session.autocommit |
+----------------------+
| 0 |
+----------------------+
1 row in set (0.00 sec)
mysql> select @@global.autocommit;
+---------------------+
| @@global.autocommit |
+---------------------+
| 1 |
+---------------------+
1 row in set (0.00 sec)
002:MySQL升级以及访问连接的更多相关文章
- Mysql 升级重装后连接出错 Table \'performance_schema.session_variables\' doesn\'t exist
升级重装后 连接出错 报这个错误 Table 'performance_schema.session_variables' doesn't exist 使用这个命令即可 [root@localh ...
- MySQL Block Nested Loop and Batched Key Access Joins(块嵌套循环和批量Key访问连接)
Block Nested-Loop and Batched Key Access Joins Batched Key Access (BKA) Join算法通过index和join buffer访问j ...
- mysql数据库可以远程连接或者说用IP地址可以访问
mysql数据库可以远程连接或者说用IP地址可以访问 一般情况不建议直接修改root的权限, 先看下,自己mysql数据库的用户级权限 mysql -u root -p----->用root登陆 ...
- Mysql单表访问方法,索引合并,多表连接原理,基于规则的优化,子查询优化
参考书籍<mysql是怎样运行的> 非常推荐这本书,通俗易懂,但是没有讲mysql主从等内容 书中还讲解了本文没有提到的子查询优化内容, 本文只总结了常见的子查询是如何优化的 系列文章目录 ...
- mysql如何开启远程连接(默认未开启,即使密码正确,仍然无法访问)
mysql如何开启远程连接 | 浏览:1846 | 更新:2015-03-11 20:19 1 2 3 4 5 6 分步阅读 百度经验:jingyan.baidu.com 大家在公司工作中,经常会遇到 ...
- Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问
本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...
- MySQL优化二(连接优化和缓存优化)
body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...
- 不可不知的 MySQL 升级利器及 5.7 升级到 8.0 的注意事项
数据库升级,是一项让人喜忧参半的工程.喜的是,通过升级,可以享受新版本带来的新特性及性能提升.忧的是,新版本可能与老的版本不兼容,不兼容主要体现在以下三方面: 语法不兼容. 语义不兼容.同一个SQL, ...
- 【先定一个小目标】怎么解决mysql不允许远程连接的错误
最近使用Navicat for MySQl访问远程mysql数据库,出现报错,显示“1130 - Host'xxx.xxx.xxx.xxx' is not allowed to connect to ...
随机推荐
- Xcode Server (Xcode9)搭建CI
Xcode 9将Xcode Server集成进来了,这是Xcode一个新特性,不用去单独下载server了,server可以用来做CI.自动化Test等等.这里主要介绍搭建CI,相当简单 打开开关,新 ...
- Linux:history命令详解
Linux下History命令 主要用于显示历史指令记录内容, 下达历史纪录中的指令 . 语法 history [n] history [-c] history [-raw] histfiles ...
- Django项目的ORM操作之--数据模型类创建
在django项目中,其自带了ORM(Object Relation Mapping)对象关系映射框架,我们在django项目下app的models模块下对类进行操作,通过ORM会将我们对类的操作转化 ...
- 编写configure.ac
configure.ac由一些宏组成(如果已经有源代码,你可以运行autoscan来产生一个configure.scan文件,在此基础修改成configure.ac将更加方便) 最基本的组成可以是下面 ...
- Scrapy爬虫库使用初体验
安装pip install Scrapy 中间可能会遇到的问题: 超时,网络问题需要多次尝试 缺少vc++库,官网可以下载 win32api缺失,https://sourceforge.net/pro ...
- IOS 的本地通知
IOS 的本地通知 - (void)viewDidLoad { [super viewDidLoad]; UILocalNotification* localNotification = [[UILo ...
- 【剑指offer】顺时针打印矩阵,C++实现
原创文章,转载请注明出处! 博客文章索引地址 1.题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵,则依次打印出数字1,2,3,4,8,12,16,15,14 ...
- [javascript][转载]jQuery获取Select选择的Text和 Value
原文地址: http://www.cnblogs.com/yaoshiyou/archive/2010/08/24/1806939.html http://www.cnblogs.com/SAL292 ...
- erl_0020 《面对软件错误构建可靠的分布式系统》读书笔记001 “面向并发COPL”
在现实世界中,顺序化的(sequential)活动非常罕见.当我们走在大街上的时候,如果只看到一件事情发生的话我们一定会感到不可思议,我们期望碰到许多同时进行的活动. 如果我们不能对同时发生的众多事件 ...
- BZOJ4832: [Lydsy1704月赛]抵制克苏恩(记忆化&期望)
Description 小Q同学现在沉迷炉石传说不能自拔.他发现一张名为克苏恩的牌很不公平.如果你不玩炉石传说,不必担心,小Q 同学会告诉你所有相关的细节.炉石传说是这样的一个游戏,每个玩家拥有一个 ...