Linux tar.gz 安装mysql
安装环境CentOS 6,理论其他环境一样,下载对应版本即可
安装mysql
- 下载mysql wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz
- 解压 tar xzvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz
- 移动 mv mysql-5.7.36-linux-glibc2.12-x86_64 /usr/local/mysql
- 添加mysql组:groupadd mysql
- 添加mysql用户以及组 useradd -r -g mysql mysql
- 配置权限chown -R mysql:mysql /usr/local/mysql
- 配置权限chmod -R 755 /usr/local/mysql
- /etc/my.cnf配置
[mysqld]
bind-address=0.0.0.0
#skip-grant-tables
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /usr/local/mysql/mysql.sock
log_error=/usr/local/mysql/data/error.log
character-set-server=utf8
port = 3306
server-id=100
pid-file=/usr/local/mysql/data/mysql.pid
# 开启binlog,一定要开启binlog,否则出了问题想恢复数据都恢复不了
log_bin = mysql-bin
binlog_format = ROW
expire_logs_days = 30
server-id=1
# 开启binlog结束
[client]
socket = /usr/local/mysql/mysql.sock
default-character-set=utf8
[mysqld_safe]
log-error=/usr/local/mysql/data/error.log
pid-file=/usr/local/mysql/data/mysql.pid
tmpdir=/usr/local/mysql/tmp
- 编译安装并初始化mysql,务必记住初始化输出日志末尾的密码(数据库管理员临时密码)
- cd /usr/local/mysql/bin
- 执行命令:./mysqld --initialize --user=mysql --defaults-file=/etc/my.cnf --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql
- 添加软连接,并重启mysql服务
- ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
- ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
启动mysql
- 执行命令 service mysql restart
- 执行命令关闭 service mysql stop
- 重置密码
- 在my.cnf中[mysqld]下面添加skip-grant-tables,然后启动mysql
- 执行 mysql -u root -p
- 回车登陆mysql
- 执行命令更改密码 update mysql.user set authentication_string=password('123456') where user='root' ;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
- 如果提示以上错误,执行 alter mysql.user 'root'@'localhost' identified by '123456'; 初始化mysql密码
- 如果上面的命令执行报错,尝试使用set password = password('123456');
- 执行use mysql; 再执行 update mysql.user set Host='%' where User='root'; 开放root用户远程连接
- 刷新权限 flush privileges;
- 检验,mysql -uroot -p123456 登陆mysql
- 执行show databases;
- 如果报错ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
- 尝试执行:
- set password = password('123456');
- flush privileges;
开机启动
// 把mysql服务加到系统服务列表中
chkconfig --add mysql
// 设置开机自启动
chkconfig mysql on
开启防火墙
// 查看防火墙开放端口
service iptables status
// 开放3306端口
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
// 保存永久生效
service iptables save
删除mysql
执行命令关闭 service mysql stop
执行以下命令彻底删除
rm -R /etc/init.d/mysql
rm -R /usr/bin/mysql
rm -R /usr/local/mysql
rm -R /etc/mysql
binlog的三种模式比较
- binlog的格式也有三种:STATEMENT、ROW、MIXED。
- STATMENT模式:基于SQL语句的复制(statement-based replication, SBR),每一条会修改数据的sql语句会记录到binlog中。
优点:不需要记录每一条SQL语句与每行的数据变化,这样子binlog的日志也会比较少,减少了磁盘IO,提高性能。
缺点:在某些情况下会导致master-slave中的数据不一致(比如:delete from t where a>=4 and t_modified<='2018-11-10' limit 1;在主库执行这个语句的时候,如果使用的是a索引,会删除(4,4,'2018-11-10')这条记录,如果使用的是t_modified的索引则会删除insert into t values(5,5,'2018-11-09');所以在执行这条sql语句的时候提示:
Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
由于 statement 格式下,记录到 binlog 里的是语句原文,因此可能会出现这样一种情况:在主库执行这条 SQL 语句的时候,用的是索引 a;而在备库执行这条 SQL 语句的时候,却使用了索引 t_modified。因此,MySQL 认为这样写是有风险的。
sleep()函数, last_insert_id(),以及user-defined functions(udf)等也会出现问题); - ROW基于行的复制(row-based replication, RBR)格式:不记录每一条SQL语句的上下文信息,仅需记录哪条数据被修改了,修改成了什么样子了。
优点:不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。
缺点:会产生大量的日志,尤其是alter table的时候会让日志暴涨。 - MIXED混合模式复制(mixed-based replication, MBR):以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式