# mysql

# 1、安装

sudo apt update
sudo apt install mariadb-server
sudo systemctl status mariadb

sudo mysql_secure_installation # 初始化数据库
1
2
3
4
5

创建数据库

sudo mysql -uroot -p

MariaDB [(none)]> CREATE DATABASE test;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON test.* TO 'test'@'localhost' IDENTIFIED BY '123456';
MariaDB [(none)]> GRANT ALL ON test2.* TO 'test'@'%'; # 授权其他数据库权限,如无则省略
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> \q
1
2
3
4
5
6
7

修改 root 密码:

sudo mysql -uroot -p

MariaDB [(none)]> alter user 'root'@'localhost' identified by 'new pass';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> \q
1
2
3
4
5

进入安全模式:

sudo systemctl stop mysql
# 或者
sudo /etc/init.d/mysql stop

sudo mysqld_safe --skip-grant-tables &
mysql -uroot

update user set plugin="mysql_native_password" where user="root";
flush privileges;
\q

sudo systemctl start mysql
1
2
3
4
5
6
7
8
9
10
11
12

关闭安全模式:

set sql_safe_updates = 0;
# authentication_string 设置为空才不会报 ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%' 错误
update user set authentication_string="" where user="root";

# 刷新权限表使其生效
flush privileges;
# 修改密码格式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'xxx';
# 修改密码
ALTER USER 'root'@'%' IDENTIFIED BY 'xxx';
# 或
ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxx';
1
2
3
4
5
6
7
8
9
10
11
12

# 2、设置外网访问

修改配置文件 sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

# bind-address = 127.0.0.1
bind-address = 0.0.0.0
1
2

为需要远程登录的用户赋予权限

grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;
1
2

查看用户列表信息:

use mysql;
select user,host from user;
1
2

# 3、卸载

卸载所有 mariadb/mysql 相关的软件

sudo apt-get remove mysql-\*
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
1
2

提示窗口:Remove all MariaDB databases?,选择“是”

再执行一次 dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P,即可。

# 4、docker 安装

docker search mariadb
docker pull mariadb

sudo docker run -d -p 3306:3306 -e PUID=1000 -e PGID=100 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=testdb -e MYSQL_USER=testdb -e MYSQL_PASSWORD=123456 --name mariadb --restart always -v /home/sanyer/db:/var/lib/mysql mariadb
1
2
3
4

-d: 后台运行容器​,并返回容器ID

-name: 为容器指定一个名称

-p 3306:3306: 容器服务开放的端口,前者是宿主机的端口,后者是容器内服务的端口

-e PUID、-e PGID: 运行容器的用户的权限集id

-e MYSQL_ROOT_PASSWORD: 数据库root用户的密码

-e MYSQL_DATABASE=testdb :创建一个名称为testdb的数据库

-e MYSQL_USER:创建一个名称为testdb的用户

-e MYSQL_PASSWORD:名称为testdb的用户的密码

-v:数据卷绑定 前者是宿主机的地址,后者是容器机器的位置

# 5、常见问题

# 5.1 mysql正确清理binlog日志的方法

mysql -uroot -p

# 查看主库和从库正在使用的binlog是哪个文件
show master status
show slave status\G

# 手动删除
purge binary logs to 'binlog.000055'; # 将bin.000055之前的binlog清除
purge binary logs before '2024-05-30 13:09:51'; #将指定时间之前的binlog清除

# 在配置文件my.cnf中修改
expire_logs_day = 30 # 设置过期时间为30天
# 或者
max_binlog_size = 10m # 二进制日志最大大小
1
2
3
4
5
6
7
8
9
10
11
12
13
14

注意:对于主从复制,要看从库的延迟决定过期时间,避免主库binlog还未传到从库便因过期而删除,导致主从不一致

# 5.2 mysql 重置自增ID

# 设置自增ID值
ALTER TABLE table_name AUTO_INCREMENT = value;

# 清空表数据
TRUNCATE TABLE tablename;

# 保留数据重置 - 直接删除 ID
# 把 ID 列删除,然后重新新建 ID 列

# 将表导出(结构和数据、仅结构)至 sql 文件
# 修改 sql 文件,删除 AUTO_INCREMENT
1
2
3
4
5
6
7
8
9
10
11
上次更新: 6/3/2024, 7:39:43 PM