MySQL安装升级

mysql dba应该关注的网站

http://www.mysql.com/

mysql包的生命周期 Milestone Release(MR)>Release Candidate(RC) 
>Generally Avaialble(GA)>Archived Version

为什么推荐选择MySQL官方版本

Oracle MySQL,Percona, MariaDB,Drizzle 推荐级别由前到后。
Oracle MySQL 官方MysSQL数据库版本,mysql5.6后将Percona的优化集成到官方版本。
Percona 使用XtraDB引擎。
MariaDB 核心代码相对较老。
Drizzle 采用C++语言重构各个模块,它与MySQL不兼容。

MySQL版本的选择及注意

推荐安装linux-generic,同时选择mysql5.6以上的版本。因为mysql5.6修复了5.5的好多bug。
线上使用注意从http://dev.mysql.com/downloads/mysql/下载并用md5sum校验文件的MD5值。

MySQL安装及升级

MySQL5.6安装,主要参考安装文档INSTALL-BINARY文件。

To install and use a MySQL binary distribution, the command
sequence looks like this:
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/mysql_install_db --user=mysql    # Before MySQL 5.7.6
shell> bin/mysqld --initialize --user=mysql # MySQL 5.7.6 and up
shell> bin/mysql_ssl_rsa_setup              # MySQL 5.7.6 and up
更改默认文件所属组 bin/mysql_ssl_rsa_setup  --uid mysql --datadir=/data/mysql57 
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

MySQL启动与停止

查看mysql启动加载my.cnf的顺序
mysqld -v –help |grep my.cnf
my.cnf参数覆盖原则,都读取,相同参数配置值会被后面的覆盖。

  • a) mysqld启动 [mysqld]
    mysqld –defaults-file=my.cnf –user=mysql

  • b) mysql_safe启动,调用mysqld [mysql_safe]。
    mysqld_safe 如果mysqld进程被kill掉,mysqld_safe会被拉起
    mysqld_safe is a shell script that invokes mysqld
    mysqld_safe –defaults-file=my.cnf –user=mysql

  • c)mysql.server服务启动 [mysql_server]
    mysql.server is a shell script that invokes mysqld_safe

  • d)mysqld_multi 多实例启动,指定启动加载配置
    mysqld_safe –defaults-file=my.cnf &

停止
/etc/init.d/mysqld stop
mysqladmin shutdown

登录
mysql –login-path 别名 相对安全的登录方式
mysql mysql_config_editor set -G 别名 -uroot -p

升级

  • a)安全的停止数据库,备份系统库。
  • b)修改软链接指向
  • c)启动mysql,mysql_upgrade -s 升级系统库。

用户权限管理
用户认证流程:user和ip是否允许->查看mysql.user表->查看mysql.db表
->查看mysql.table_priv表->查看mysql.column_priv->提示用户没有权限

notes:

  • a)是否已经存在/etc/my.cnf /etc/mysql/my.cnf
  • b)datadir,innodb_undo_directory,innodb_log_group_home_dir目录权限
  • c)datadir,innodb_undo_directory,innodb_log_file_size=4G(生产环境至少2G)初始化后不能改变。!!!
  • d)5.6删除默认的test库,默认所有人都可以连接test库。
  • e)把自己mysql bin添加在$PATH前面。
  • f)my.cnf参数覆盖原则
  • g)通过global修改参数不影响seesion参数

mysql安装问题汇总

Q:error log 中出现 Table ‘mysql.plugin’ doesn’t exist
A:mysql没有初始化或者没有初始化成功

Q:[ERROR] InnoDB: innodb-page-size mismatch in data file ./ibdata1
A:重新初始化前,清空datadir对应的数据目录。初始化后注意修改datadir对应的所属用户和组。

Q:Installing MySQL system tables…2015-11-11 17:28:26 0 [Warning] ‘ERROR_FOR_DIVISION_BY_ZERO’ is deprecated and will be removed in a future release.
2015-11-11 17:28:26 0 [Warning] ‘NO_ZERO_DATE’ is deprecated and will be removed in a future release.
2015-11-11 17:28:26 0 [Warning] ‘NO_ZERO_IN_DATE’ is deprecated and will be removed in a future release.
A:sql_mode 这些参数ERROR_FOR_DIVISION_BY_ZERO NO_ZERO_DATE NO_ZERO_IN_DATE 这些参数将过时,但是向下兼容的。

Q:今天安装mysql scripts/mysql_install_db后 mysql.user表为空
A:my.cnf 配置autocommit=0导致。

Q;insert into mysql.user(host,user,password,Grant_priv,Super_priv)values(‘%’,’root’,PASSWORD(‘redhat’),’Y’,’Y’)
这个操作也不规范。
A:重新初始化或者add user或者copy原来的用户权限表。