安装

ubuntu2020.04

1
sudo apt install mysql-server mysql-client

win10系统安装

可下载exe安装,这里介绍免安装方式:MySQL Community Server 免安装下载(noninstall)

  1. 下载,选择“MySQL Community Server”:https://dev.mysql.com/downloads/。

  2. 依赖,在安装MySQL之前,Microsoft Visual C++ 2015 Redistributable Package 要安装在Windows系统上。如果已经有了,可以忽略。

  3. 解压下载的mysql-8.0.19-x64.zip,到软件的安装位置,如D:/Program Files,避免中文路径。

  4. 添加到环境变量path,比如D:/Program Files/mysql-8.0.19-x64/bin。环境变量设置方式这里不多介绍(此电脑 > 属性 > 高级系统设置 > 高级 > 环境变量)。

  5. 初始化data目录,通过免安装方法下载的ZIP文件中不包含data目录。需要通过创建数据目录并填充mysql系统数据库中的表来初始化MySQL安装。有两个命令可以使用:

  • mysqld –initialize:生成随机的初始root密码,记录下随机密码,后续改成自己的密码时需要。
  • mysqld –initialize-insecure:不会生成root密码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    管理员权限打开cmd或powershell,输入:`mysqld --initialize-insecure --console`。在Windows上,使用 --console选项 会将消息定向到控制台

    6. 启动mysql服务。cmd或者powershell中输入:`mysqld --console`,可以从其他的cmd窗口中使用mysql客户端访问mysql服务(`mysql -u root -p`)。关闭这个窗口就可以把MySQL服务器关掉了,也可以在新的终端中输入`mysqladmin -u root shutdown`,也可以关闭MySQL服务器。

    7. 将MySQL服务安装为Windows服务,之前的步骤可以使用是为临时使用。请以管理员方式打开PowelShell或者cmd,输入`mysqld --install`,该指令默认的服务名为MySQL,启动类型是开机自启。

    也可指定服务名,不推荐`mysqld --install 服务名`。

    8 启动上一步骤的服务。在终端中使用`net start mysql`启动MySQL的服务了;通过命令`net stop mysql`停止服务。

    9. 配置root密码。连接到服务:
    mysql -u root –skip-password # 如果安装使用的–initialize-insecure,跳过密码

    或者

    mysql -u root -p # 回车后输入当时的临时密码。

进入mysql命令行, 输入

alter user ‘root’@’localhost’ identified by ‘新密码’;
commit;
quit;

1
2
3

10. 测试安装
打开新终端:

mysqlshow -u root -p
mysqlshow mysql -u root -p
mysqladmin version status proc -u root -p
mysql -e “select User, Host, plugin from mysql.user” mysql -u root -p

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

11. 其他指令
- 卸载:`mysqld --remove`

## 安装后修改服务账户与密码
- 查看mysql服务配置
```zsh
$ sudo cat /etc/mysql/debian.cnf
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = debian-sys-maint
password = 6n7lzWp5E88zsPhv
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host = localhost
user = debian-sys-maint
password = 6n7lzWp5E88zsPhv
socket = /var/run/mysqld/mysqld.sock
  • 通过以上user和password登录mysql服务

    1
    2
    3
    4
    $ mysql -u debian-sys-maint -p
    Enter password:

    # 输入密码进入
  • 添加root账户登录,并修改密码为123456

    1
    2
    > ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
    > exit # 退出
  • 重启mysql服务

    1
    2
    sudo service mysql stop
    sudo service mysql start
  • 以root用户名登录

    1
    2
    3
    $ mysql -u root -p
    Enter password: # 此处输入密码123456
    >

mysql恢复idb数据表

恢复数据表user:

  1. 先建立和之前user表一样的表结构,再数据库目录下会建立user.idb文件。
  2. 执行alter tableuserdiscard tablespace ;,数据库目录下的user.idb文件会删除;
  3. 复制需要恢复的user.idb文件到该目录下。可以给这个文件加权限,所有者mysql ,权限660(你可以参考别的ibd文件所有者和权限设置),如果不需要,可忽略;
  4. alter tableuserimport tablespace;,数据表中的数据即可读。
  5. 注意,如果旧表和新表的create table语句不一样,数据import会出错,保证新表和旧表的创建语句一致;

注意:如果有外键关联:

1
2
3
4
# 取消外键约束
SET FOREIGN_KEY_CHECKS = 0;

SET FOREIGN_KEY_CHECKS = 1;

复制表

1
2
# 查询表建立语句
show create table user;

复制user表的创建语句,修改表名为user1,执行语句;

1
insert into user1 select * from user limit 10;

复制表user的数据,限制10条。

复制创建表

1
2
3
4
5
# 创建表,不拷贝数据
create table newstrip like strip;

# 拷贝数据
insert into newstrip select * from strip;

清空表数据

清空表数据,不删除表结构

1
2
3
4
5
6
7
# truncate速度快,不记录log,删除所有数据。
# 如果有外键,无法删除,需要先接触外键check
truncate table table_name;

# 速度较慢,会记录log
# 即使有外键也不影响,会同时删除级联的下级数据;
delete from table_name;

修改表名

1
rename table user1 to user2;

修改列名

1
alter table user change old new int;

插入列

1
alter table user add column status INT NOT NULL DEFAULT 0;

修改列属性

1
alter tagitble user modify column id varchar(50);

更新列

1
update user set col1='pum' where id=5;

更新某列的时间

1
update user set create_time=ADDTIME(DATE('2022-05-05 23:00:00') + INTERVAL 0 HOUR, TIME(create_time)) where id=5;

删除列

1
alter table strip drop column status;

删除unique key

1
alter table strip drop index uk_name;

删除指定条件数据

1
delete from use where id = 5;

二,ibd方式其实很简单,

生成数据结构(有的可以跳过)

1,创建一个新库

2,新库里新建一个表,名字和回复的表一样。

字段数量一样(字段类型和名字都无所谓)

3,将之前的frm文件拷贝覆盖当前的。

4,重启mysql

生成数据

5,关闭mysql服务

6,mysql.ini 增加 innodb_force_recovery = 6

7,开启mysql服务

8,运行命令 alter table 表名 discard tablespace;

9,将老的ibd复制进来

10,运行命令 alter table 表名 import tablespace;

11,关闭mysql服务

12,mysql.ini 删除 innodb_force_recovery = 6

13,开启Mysql服务。

完成