docker 安装mysql
- 临时启动 docker run -d -p 13306:3306 --name mysql mysql:5.7
- 复制内容 docker cp mysql:/var/log/mysql /root/soft/mysql/log docker cp mysql:/var/lib/mysql /root/soft/mysql/data docker cp mysql:/etc/mysql /root/soft/mysql/conf
- 正式启动
docker run -p 13306:3306 --name mysql \
-v /root/soft/mysql/log:/var/log/mysql \
-v /root/soft/mysql/data:/var/lib/mysql \
-v /root/soft/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
ps:mysql 8.0
docker run -p 23306:3306 --name mysql8 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0
docker run -p 3306:3306 --name mysql \
-v /root/soft/mysql/mysql-files:/var/lib/mysql-files \
-v /root/soft/mysql/log:/var/log/mysql \
-v /root/soft/mysql/data:/var/lib/mysql \
-v /root/soft/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql
安装包方式安装
-
卸载之前mysql rpm -qa|grep -i mysql
如果出现错误:error: package –nodeps is not installed 使用以下命令:rpm -ev 包名 --nodeps 如果提示错误:error: %preun(xxxxxx) scriptlet failed, exit status 1 则用以下命令尝试:rpm -e --noscripts 包名 删除完后再使用 rpm -qa|grep -i mysql 查询一遍是否还有 -
查找mysql的目录、删除mysql的文件和库 find / -name mysql rm -rf 删除对应的mysql目录
-
安装mysql wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar
-
解压 tar -xvf mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar
-
安装 rpm -ivh mysql-community-common-5.7.16-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.16-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.16-1.el7.x86_64.rpm rpm -ivh mysql-community-server-5.7.16-1.el7.x86_64.rpm
-
初始化mysql mysqld --initialize --user=mysql
-
查初始化密码 cat /var/log/mysqld.log | tail -n 10 IF&<j!zp+4K2
-
启动重启mysql systemctl start mysqld.service systemctl stop mysqld.service systemctl status mysqld systemctl restart mysqld
通用配置
-
首次登陆 mysql -uroot -p 之后直接回车
-
进入之后第一时间修改密码 ALTER USER 'root'@'localhost' IDENTIFIED BY 'root123';
-
更改访问 update user set host = '%' where user = 'root'; GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY 'root123' WITH GRANT OPTION;
-
刷新 flush privileges;
-
修改字符集 show variables like 'character%'; vim /etc/my.cnf character_set_server=utf8 init_connect=’SET NAMES utf8’
-
data位置 show variables like 'datadir';
-
日志是否开启 show variables where Variable_name = 'general_log'; show variables like 'general_log';
-
日志位置 show variables where Variable_name='general_log_file'; show variables like 'general_log_file';
-
开启日志 set global general_log=on;
-
general_log保存到 general_log_file = /root/log/mysql/mysql.log general_log = 1
-
设置权限 chown -R mysql.mysql /home/logs
-
开启binlog
SHOW VARIABLES LIKE 'log_bin';
安装包 找到my.cnf :
mysql --help | grep 'Default options' -A 1
vi /etc/my.cnf
docker 位置
vi /root/soft/mysql/conf/mysql.conf.d/mysqld.cnf
#开启binlog日志
log_bin=ON
log-bin=mysql-bin
#位置
log-bin= /var/lib/mysql/mysql-bin
#配置serverid
server-id=1
#设置binlog清理时间
expire_logs_days = 30
#binlog每个日志文件大小
max_binlog_size = 50m
#binlog缓存大小
binlog_cache_size = 4m
#最大binlog缓存大小
max_binlog_cache_size = 512m
#解决时间差
default-time-zone = '+08:00'
#show status like '%connect%';
max_connections = 2000
#查看binlog日志是否开启
show variables like '%log_bin%';
#查看binlog日志路径
show variables like '%datadir%';
#刷新日志,会新建一个binlog日志文件
flush logs;
#查看日志详情内容
show binlog events in 'mysql-bin.000001';
#查看日志过期时间 0为永久
show variables like 'expire_logs_days';
mysqlbinlog 命令的使用
查看日志 Binlog 的日志格式 STATEMENT:基于SQL语句的复制(statement-based replication, SBR) ROW:基于行的复制(row-based replication, RBR) MIXED:混合模式复制(mixed-based replication, MBR)
查看Binlog
mysqlbinlog -v --base64-output=decode-rows mysql-bin.000001
查看删除的上下10行
mysqlbinlog -v --base64-output=decode-rows mysql-bin.000001 | grep -i -A 10 -B 10 drop
删库恢复 找到删除的 pos id docker mysqlbinlog 在 /usr/bin/ 查看二进制日志中的事件 show binlog events in 'mysql-bin.000001';
./mysqlbinlog --start-position=12218 --stop-position=12565 /var/lib/mysql/mysql-bin.000001 | mysql -uroot -proot123
时间范围之内的 mysqlbinlog -v --start-datetime='2022-07-10 10:35:00' --stop-datetime='2022-07-10 14:45:00' mysql-bin.000001 | grep t_user
权限
-- 赋予查询权限的ip用户密码
GRANT SElECT ON *.* TO 'soft'@'192.168.16.58' IDENTIFIED BY "CHtonnDGPKj4gN4s";
-- 删除用户权限
drop user soft@'192.168.16.58'
-- 查看用户权限
select * from mysql.user where user='soft';
--数据库权限
GRANT SElECT ON soft_instance.* TO 'soft'@'192.168.16.58';
GRANT SElECT ON mysql.* TO 'soft'@'192.168.16.58';
-- 移除权限
REVOKE SElECT ON soft_instance.* FROM 'soft'@'192.168.16.58';
-- 刷新
flush privileges;