#yum安装
选择yum源后使用
yum install mariadb-server mariadb 命令安装对应版本
---------------
#rpm 安装 需要手动安装四个依赖
名字:
server
devel
shared
clint
-----------------------
#编译安装
1.获取源代码包 解压缩,源码目录下有一个makefile
2.进入源码目录下,执行make,自动东区makefile
3.在编译完成后,执行make install,安装mysql到指定位置
安装依赖
yum install ncurses-devel libaio-devel gcc gcc-c++ make cmake wget
查询安装是否成功
rpm -qa ncurses-devel libaio-devel
创建mysql 用户
useradd -s /sbin/nologin -M mysql
解释:(是一个在Linux系统中用于添加新用户的命令。具体来说,这条命令用于添加一个名为mysql的新用户,并为其设置一些特定的选项。下面是命令各部分的解释:
useradd: 这是Linux中用于添加新用户的命令。
-s /sbin/nologin: 这个选项设置用户的登录shell为/sbin/nologin。通常,这意味着这个用户不能登录系统,因为/sbin/nologin会阻止用户登录。这对于那些只需要运行后台服务或进程,而不需要交互式登录的用户帐户来说是很有用的,比如数据库用户或其他系统服务用户。
-M: 这个选项告诉useradd命令不要创建用户的主目录。通常,当用户被创建时,系统会在/home/目录下自动为该用户创建一个主目录(例如,对于用户名为mysql的用户,会创建一个/home/mysql目录)。但是,使用-M选项会阻止这一行为。
mysql: 这是要创建的用户的用户名。
)
解压 tar包
tar -zxvf mysql-8.4.0.tar.gz
进入目录执行cmake
cmake -DCMAKE_INSTALL_PREFIX=/application/mysql -DMYSQL_UNIX_ADDR=/application/mysql/mysql.sock -DSYSTEMD_PID_DIR=/application/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/application/mysql/data -DDOWNLOAD_BOOST=1 -DWITH_SYSTEMD=1
编译后 执行 make && make install 进行安装
mysql 初始化 使用mysql用户进行启动(为创建mysql使用root用户初始化)
sudo mysqld --initialize --user=mysql
启动mysql 并开机启动
systemctl start mysqld
systemctl enable mysqld
修改密码
mysqladmin -uroot -p
-------------------------------------
二进制安装方式
wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.45-linux-glibc2.12-x86_64.tar.gz
创建用户
useradd -s /sbin/nologin -M mysql
解压缩二进制
tar -zxvf /home/xiaolong/tools/mysql-5.6.45-linux-glibc2.12-x86_64.tar.gz -C /application/
准备多实例的安装目录
mkdir -p /my_mysql/{3306,3307}
mkdir -p /my_mysql/{3306,3307}/data
touch /my_mysql/3306/mysql-3306.err
准备启停脚本
数据初始化 初始化data文件
编辑my.cnf 注意修改端口和serverid
vim /my_mysql/3306/my.cnf
::%s/3306/3307/g
增加文件访问权限
chown -R mysql:mysql /my_mysql
配置环境变量
vim /etc/profile
最下方增加
export PATH=/application/mysql-5.6.45-linux-glibc2.12-x86_64/bin/:$PATH
-------
[client]
[mysqld]
port = 3306
# 服务器独立的socket文件 登陆时使用
socket = /my_mysql/3306/mysql.sock
#应用程序目录
basedir=/application/mysql-5.6.45-linux-glibc2.12-x86_64/
#初始化数据存放目录
datadir=/my_mysql/3306/data
#用于主从复制
log-bin=/my_mysql/3306/mysql-bin
#数据库标识id
server-id=3306
[mysqld_safe]
log-error=/my_mysql/3306/mysql-3306.err
pid-file=/my_mysql/3306/mysql-3306.pid--------
初始化
/application/mysql-5.6.45-linux-glibc2.12-x86_64/scripts/mysql_install_db --user=mysql --basedir=/application/mysql-5.6.45-linux-glibc2.12-x86_64 --defaults-file=/my_mysql/3306/my.cnf --datadir=/my_mysql/3306/data
/application/mysql-5.6.45-linux-glibc2.12-x86_64/scripts/mysql_install_db --user=mysql --basedir=/application/mysql-5.6.45-linux-glibc2.12-x86_64 --defaults-file=/my_mysql/3307/my.cnf --datadir=/my_mysql/3307/data
--------------------------
启停脚本 由于关机时候无法删除sock 和 pid文件 所以 要在启停脚本执行时增加删除文件
#!/bin/bash
port=3306
user=mysql
Cmdpath="/application/mysql-5.6.45-linux-glibc2.12-x86_64/bin/"
mysql_sock="/my_mysql/${port}/mysql.sock"
mysqld_pid_file_path="/my_mysql/${port}/mysqld_${port}.pid"
start() {
if [ -e "$mysql_sock" ]; then
rm "$mysql_sock"
fi
if [ -e "$mysqld_pid_file_path" ];then
rm $mysqld_pid_file_path
fi
if [ ! -e "$mysql_sock" ]; then
printf "启动mysql中\n"
/bin/sh "${Cmdpath}/mysqld_safe" --defaults-file="/my_mysql/${port}/my.cnf" --pid-file="$mysqld_pid_file_path" 2>&1 > /dev/null &
sleep 3
if [ ! -e "$mysql_sock" ]; then
printf "mysql 启动失败\n"
exit 1
else
printf "mysql 启动成功\n"
fi
else
printf "mysql 已经启动\n"
exit 1
fi
}
stop(){
if [ ! -e "$mysql_sock" ]; then
printf "mysql 未启动\n"
exit 1
else
printf "mysql 正在停止\n"
mysqld_pid=`cat "$mysqld_pid_file_path"`
if (kill -0 $mysqld_pid 2>/dev/null)
then
kill $mysqld_pid
sleep 2
if [ ! -e "$mysql_sock" ]; then
printf "mysql 已停止\n"
exit 1
else
printf "mysql 停止失败\n"
fi
fi
fi
}
restart(){
printf "重启服务中\n"
stop
sleep 2
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
printf "信息:/data${port} {start|stop|restart}\n"
esac
设置开机启动 配置下方脚本后 sudo systemctl enable mysql3306 ;sudo systemctl start mysql3306
在crontab -e 中增加脚本
@reboot /my_mysql/3306/mysql_ctl_3306 start
@reboot /my_mysql/3307/mysql_ctl_3307 start
登陆 ip+host登陆
mysql -uroot -p -h127.0.0.1 -P3306
本机可以使用套接字登陆
mysql -S /my_mysql/3306/mysql.sock
修改密码 两种方式
mysqladmin -uroot -p -h127.0.0.1 -P3306 password
mysqladmin -uroot -S /my_mysql/3306/mysql.sock password
--------------------------mysql操作
远程登陆授权 grant/授权去除/revoke /commit提交/rollback回滚
grant all privileges on *.* to root@'192.168.174.%' identified by '123456'; 只有登陆权限 没其他权限 一定记得要刷新授权表 flush privileges;
grant 给与的权限 on 数据库.数据表 to 用户@'允许登陆的主机';
创建数据库 使用utf8
create database lol default character set utf8 collate utf8_general_ci;
show variables like 'char%'; 查看数据库字符集信息
use mysql;选择数据库
select database();查看使用的数据库
desc user; 显示表结构
create user root@'%' identified by '123456';增加用户全部网址访问权限包括外网
show grants for root ;查询用户权限
--帮助
? data definition; 查看DDL 操作 数据定义语言 用于定义或修改数据库结构的语句
? account management; 查看DCL操作 授权管理 是用来设置或更改数据库用户或角色权限
? data manipulation;查看DML错做 数据操作语言,是用于查询和操作数据库中数据的语句集合
创建表 tanks 使用的时反引号或不用引号
create table if not exists `tanks` (
id int auto_increment,
name varchar(100) not null,
skills varchar(255) not null,
price int not null,
primary key (id)
)engine=innodb default charset=utf8;
select * from tanks liimit,2;
修改自增和主键,有主键不能再增加 alter table tanks modify id int(11) primary key auto_increment
----------------------------mysql用户和服务器权限控制语句-----------
GRANT SELECT,INSERT,UPDATE,DELETE on 数据库.数据表 to 用户名@'%' identified by '密码'
不要用*.*
一定要记得刷新权限:flush privileges;
不要随便使用 all privileges;
尽量不要使用%给ip地址,需要限制ip或者网段‘192.168.174.%’ 即便是公网中使用也要用防火墙保证安全,以及更换mysql的默认端口号等
方式:root登陆密码复杂
更改ssh端口 sudo vi /etc/ssh/sshd_config 修改port 重启服务 sudo systemctl restart sshd
禁止root登陆,只允许普通用户登陆 修改 SSH 配置文件/etc/ssh/sshd_config中的PermitRootLogin为no
禁止使用账号密码登陆 修改 SSH 配置文件/etc/ssh/sshd_config中的PasswordAuthentication为no
只用普通用户+公私钥的形式登陆 cp /home/xiaolong/id_rsa.pub /root/.ssh/ 写入cat id_rsa.pub >> authorized_keys
修改常见的软件默认端口,例如3306,6379
----索引的查看和创建
查看索引: show INDEX FROM table;
创建索引: alter table tanks add index 索引名(字段名);
删除索引: alter table tanks drop index 索引名;