一、安装与配置
(转载: https://www.cnblogs.com/caiyunyun/p/7492373.html)
1、下载
下载地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads
下载版本:我这里选择的5.6.33,通用版,linux下64位
也可以直接复制64位的下载地址,通过命令下载:wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz
(
官网下载很慢,这个快点儿
链接:https://pan.baidu.com/s/1GJNceUkwZMoi9tQrUa9Row
提取码:nd5x
)
2、解压
tar -zxvf mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz
mkdir /usr/local/mysql
#复制解压后的mysql目录
cp -r mysql-5.6.33-linux-glibc2.5-x86_64 /usr/local/mysql
(我是直接将数据拷到mysql目录下了cp -r mysql-5.6.33-linux-glibc2.5-x86_64/* /usr/local/mysql
)
3、添加用户组和用户
#添加用户组
groupadd mysql
#添加用户mysql 到用户组mysql
useradd -g mysql mysql
4、安装
安装
cd /usr/local/mysql/
mkdir ./data/mysql
chown -R mysql:mysql ./
./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/mysql
(
执行这条命令失败:Installing MySQL system tables…2019-05-31 05:43:19 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details
2019-05-31 05:43:19 0 [Note] ./bin/mysqld (mysqld 5.6.33-log) starting as process 7913 …
原因:缺少libaio库文件
解决方法:yum install libaio* -y
).
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
cp support-files/my-default.cnf /etc/my.cnf
修改启动脚本
vi /etc/init.d/mysqld
修改项:
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data/mysql
启动服务
service mysqld start
测试连接
./mysql/bin/mysql -uroot
加入环境变量,编辑 /etc/profile,这样可以在任何地方用mysql命令了
export PATH=$PATH:/usr/local/mysql//bin
source /etc/profile
启动mysql
service mysqld start
关闭mysql
service mysqld stop
查看运行状态
service mysqld status
5、错误处理
** Navicat 远程错误 **
** 1、ERROR 1130: Host ‘192.168.1.3’ is not allowed to connect to thisMySQL server **
(转载:https://www.jb51.net/softjc/63583.html)
错误代码是1130,ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server 是无法给远程连接的用户权限问题
给用户授权
我用的用户是root 密码root
首选语法为:
Sql代码
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
示例:
Sql代码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
执行完后,再
mysql:flush privileges;
刷新一下权限就可以了,不用重启
** 2、Can’t connect to MySQL server (10060) **
(转载:https://blog.csdn.net/testcs_dn/article/details/51406712 )
问题原因:导致些问题可能有以下几个原因:
1、网络不通;
2、服务未启动;
3、防火墙端口未开放;
解决方法:
启动服务:
service mysqld start;
经过分析,我遇到的这个问题是防火墙导致的!
开放防火墙端口
添加需要监听的端口
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
保存设置
/etc/init.d/iptables save
查看状态
/etc/init.d/iptables status
临时关闭防火墙服务
service iptables stop
开启防火墙服务
service iptables start
开机不再启动防火墙服务
chkconfig iptables off
6、linux 重新设置mysql密码
先登陆服务器,找到自己的my.cnf文件,通常会在 /etc目录下(如果不在,可以用find / -name my.cnf命令找一下),然后使用 vi my.cnf 命令编辑该文件(建议先备份),在[mysqld]下面加上 skip-grant-tables ,
作用是登陆时跳过登陆认证,换句话说就是root什么密码都可以登陆进去,然后:wq保存退出后,用service mysqld restart重启mysql。
现在不论什么密码都可以登陆root用户了。
接下来,在Linux中输入如下命令:
[root@localhost]#mysql -uroot -p
mysql> use mysql;
mysql> update user set password=password('123') where user='root';
mysql> flush privileges;
退出mysql
删除skip-grant-tables
重启mysql,完成。
二、主从配置
(转载:https://www.cnblogs.com/lay2017/p/9043985.html)
1、原理
mysql主从配置的流程大体如图:
1)master会将变动记录到二进制日志里面;
2)master有一个I/O线程将二进制日志发送到slave;
3) slave有一个I/O线程把master发送的二进制写入到relay日志里面;
4)slave有一个SQL线程,按照relay日志处理slave的数据;
2、操作步骤
按照原理,我们开启mysql主从复制,我们大体需要做以下操作:
1)开启master的二进制日志
2)开启slave的二进制日志
3)将slave指向master
4)开始复制
3、开启master二进制日志
1)编辑mysql的配置文件,使用命令:
vim /etc/my.cnf
2)添加二进制日志配置,开启二进制(master-bin只是日志文件名称,可以自己指定)
log-bin=master-bin
server-id=1
注意:server-id是要指定的,不然会报错,每一台指定一个唯一标识符
4、授权
我们需要给slave配置一个用户/密码的权限
mysql>GRANT REPLICATION SLAVE ON *.* TO '用户名'@'slave数据库的IP地址' IDENTIFIED BY '密码';
这行命令的意思是:允许在某个IP地址的某个用户以某个密码对当前数据库的所有库和所有表进行复制操作
或者:
CREATE USER 'wzb'@'%' IDENTIFIED BY 'wzb';
GRANT REPLICATION SLAVE ON *.* TO 'wzb'@'%' IDENTIFIED BY 'wzb' WITH GRANT OPTION;
注意:以上配置了权限,我们需要刷新以下权限使用命令:
mysql>flush privileges;
或者直接重启mysql服务:
service mysql restart;
5、查看以下master的状态
其实主要是查看以下master的日志文件名字,以及文件所在的位置,使用命令:
show master status;
可以看到类似如下信息:
±------------------±---------±-------------±-----------------±------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±------------------±---------±-------------±-----------------±------------------+
| master-bin.000001 | 1516 | | | |
±------------------±---------±-------------±-----------------±------------------+
File: 日志文件名称
Position: 日志所在位置
6、开启slave的二进制日志
进入slave的服务器
1)编辑mysql的配置文件,使用命令:
vim /etc/my.cnf
2)添加二进制日志配置,开启二进制(relay-bin只是日志文件名称,可以自己指定)
log-bin=relay-bin
server-id=2
注意:server-id是要指定的,不然会报错,每一台指定一个唯一标识符
7、将slave指向master
mysql>CHANGE MASTER TO
-->MASTER_HOST='master所在服务器的IP',
-->MASTER_USER='master授权的账号',
-->MASTER_PASSWORD='master授权的密码',
-->master_port=3306,
-->MASTER_LOG_FILE='master的日志文件名',
-->MASTER_LOG_POS=master的日志所在位置;
8、开始主从复制
在slave上执行
mysql>start slave;
我们可以查看slave的运行状态:
show slave status\G;
可以看到类似如下内容:
复制代码
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master的IP地址
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 1516
Relay_Log_File: slave-bin.000004
Relay_Log_Pos: 1117
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......
复制代码
注意:
Slave_IO_Running: YES 表示slave的日志读取线程开启
Slave_SQL_Running: YES 表示SQL执行线程开启
如果有主从复制有错误信息其实也可以看到
注意
Slave_SQL_Running: No
使用show slave status\G;
显示Slave_SQL_Running: No
解决方法1:
1.程序可能在slave上进行了写操作
2.也可能是slave机器重起后,事务回滚造成的.
可以通过以下方式解决:
mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;
2)如果要停止slave的复制可以使用命令:
mysql>stop slave;
3)由于主从复制是基于I/O的日志,所以会存在一定延时,如果对数据一致性要求非常高的话,简单的主从复制在实际环境中会存在问题
解决办法2:
停止从机服务:stop slave;
然后在主库上查看binlog文件的位置:show master status\G;
±---------------------±-------------±--------------±-----------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
±---------------------±-------------±--------------±------------------+
| XXX-bin.000004 | 33622483 | | |
±---------------------±--------------±-------------±-----------------+
然后重新手动同步:
mysql> change master to
--> master_host='master_ip',
--> master_user='user',
--> master_password='pwd',
--> master_port=3306,
--> master_log_file=‘XXX-bin.000004’,
--> master_log_pos=33622483 ;
然后启动从服务:start slave;
要不就查看是否和主服务器断开了binlog的同步,要不就看是否是因为事务问题导致的数据不一致。
三、卸载
转自:https://www.cnblogs.com/taomylife/p/7234925.html
1: 检查是否安装了MySQL组件。
[root@DB-Server init.d]# rpm -qa | grep -i mysql
MySQL-devel-5.6.23-1.linux_glibc2.5
MySQL-client-5.6.23-1.linux_glibc2.5
MySQL-server-5.6.23-1.linux_glibc2.5
如上所示,说明安装了MySQL 5.6.23这个版本的client、server、devel三个组件。
2: 卸载前关闭MySQL服务
3. 收集MySQL对应的文件夹信息
[root@DB-Server init.d]# whereis mysql
mysql: /usr/bin/mysql /usr/include/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz
最好实用find命令查看MySQL数据库相关的文件,方便后面彻底删除MySQL。
[root@DB-Server init.d]# find / -name mysql
/etc/rc.d/init.d/mysql
/etc/logrotate.d/mysql
/var/lock/subsys/mysql
/var/lib/mysql
/var/lib/mysql/mysql
/usr/include/mysql
/usr/include/mysql/mysql
/usr/bin/mysql
/usr/share/mysql
/usr/lib64/mysql
4: 卸载删除MySQL各类组件
[root@DB-Server init.d]#
[root@DB-Server init.d]# rpm -ev MySQL-devel-5.6.23-1.linux_glibc2.5
[root@DB-Server init.d]# rpm -ev MySQL-server-5.6.23-1.linux_glibc2.5
You have new mail in /var/spool/mail/root
[root@DB-Server init.d]# rpm -ev MySQL-client-5.6.23-1.linux_glibc2.5
[root@DB-Server init.d]#
5:删除MySQL对应的文件夹
检查各个MySQL文件夹是否清理删除干净。
[root@DB-Server init.d]# whereis mysql
mysql:
[root@DB-Server init.d]# find / -name mysql
/var/lib/mysql
/var/lib/mysql/mysql
/usr/lib64/mysql
[root@DB-Server init.d]# rm -rf /var/lib/mysql
[root@DB-Server init.d]# rm -rf /var/lib/mysql/mysql
[root@DB-Server init.d]# rm -rf /usr/lib64/mysql
[root@DB-Server init.d]#
6:删除mysql用户及用户组
如果有必要,删除mysql用户以及mysql用户组。
[root@DB-Server ~]# more /etc/passwd | grep mysql
mysql❌101:501::/home/mysql:/bin/bash
[root@DB-Server ~]# more /etc/shadow | grep mysql
mysql:!!:16496::::::
[root@DB-Server ~]# more /etc/group | grep mysql
mysql❌501:
[root@DB-Server ~]# userdel mysql
[root@DB-Server ~]# groupdel mysql
groupdel: group mysql does not exist
[root@DB-Server ~]#
7:确认MySQL是否卸载删除
[root@DB-Server init.d]# rpm -qa | grep -i mysql