mysql 相关操作

1150 字
6 分钟
mysql 相关操作

windows 下 mysql server 安装#

1. 下载安装包#

下载后解压到目标目录,例如 D:\mysql-8.0.46-winx64

2. 创建配置文件#

在 MySQL 解压目录下新建 my.ini 文件,内容如下:

[mysqld]
port=3306
basedir=D:\\mysql-8.0.46-winx64
datadir=D:\\mysql-8.0.46-winx64\\data
max_connections=2000
max_connect_errors=1000
character-set-server=UTF8MB4
default-storage-engine=INNODB
default_authentication_plugin=mysql_native_password
max_allowed_packet = 1G
event_scheduler=ON
secure_file_priv=
innodb_buffer_pool_size=256M
transaction-isolation = READ-COMMITTED
transaction-read-only = OFF
skip-log-bin
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[mysql]
default-character-set=UTF8MB4
[client]
port=3306
default-character-set=UTF8MB4

注意basedirdatadir 需替换为实际路径,路径中的反斜杠需要双写(\\)。

3. 初始化数据库#

Terminal window
mysqld --defaults-file="D:\mysql-8.0.46-winx64\my.ini" --initialize --console

初始化完成后,控制台会输出初始随机密码,请妥善记录。

提示:如果初始化时提示缺少 DLL 文件,说明系统缺少 Microsoft Visual C++ 运行库。请下载 微软常用运行库合集 2024.11.07 安装后重试。

4. 安装服务并启动#

Terminal window
mysqld install MySQL

5. 检查端口#

Terminal window
netstat -ano|findstr "3306"

6. 修改 root 密码#

使用初始密码登录(假设初始密码为 jlk7k;Yn0iIf):

Terminal window
mysql -uroot -p'jlk7k;Yn0iIf'

登录后修改密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Admin@098';
FLUSH PRIVILEGES;

7. 切换认证插件(可选)#

如需兼容旧版客户端,可将认证方式改为 mysql_native_password

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Admin@098';
FLUSH PRIVILEGES;

8. 开启远程访问#

创建允许任意主机连接的 root 用户:

CREATE USER 'root'@'%' IDENTIFIED BY 'Admin@098';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

sql_mode 修改#

  1. 修改 mysql 全局配置文件 my.conf/my.ini/mysqld.cnf 加入以下内容
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
  1. 重启 mysql
    配置文件修改
    配置文件修改

Ubuntu 下 mysql server 安装#

1. 安装 MySQL Server#

Terminal window
apt update
apt install mysql-server-8.0

2. 检查状态并设置开机自启#

Terminal window
# 检查状态
systemctl status mysql
# 设置开机自启
systemctl enable mysql

3. 初始登录(免密或使用临时密码)#

Ubuntu 安装 MySQL 后,root 用户默认使用 auth_socket 插件(无需密码)或生成临时密码。建议先用 sudo 免密登录:

Terminal window
sudo mysql -u root

如果已设密码,则用:

Terminal window
mysql -u root -p

4. 修改 root@localhost 认证方式和密码#

将本地 root 的认证插件改为 mysql_native_password 并设置强密码(这是为了兼容旧客户端和远程工具):

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'lenglian_dba@KY2024';
FLUSH PRIVILEGES;

5. (可选)开放 root 远程访问#

注意:生产环境建议创建专用用户而非开放 root 远程,以下仅供测试或管理需要。

'root'@'%' 已存在,先删除重建(避免冲突);若不存在则直接创建:

-- 删除可能存在的远程 root(谨慎操作)
DROP USER IF EXISTS 'root'@'%';
-- 创建远程 root 并设置密码
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'lenglian_dba@KY2024';
-- 授予全部权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

6. 确保本地 root 权限完整(通常已有)#

如果之前权限被修改,可重新授予:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

7. 退出并测试连接#

EXIT;

本地测试:

Terminal window
mysql -u root -p -h localhost

远程测试(需确保 MySQL 绑定地址为 0.0.0.0 且防火墙开放 3306):

Terminal window
mysql -u root -p -h <服务器IP>

8. 完整脚本(可直接复制执行)#

-- 登录后执行以下全部
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'lenglian_dba@KY2024';
FLUSH PRIVILEGES;
DROP USER IF EXISTS 'root'@'%';
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'lenglian_dba@KY2024';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
-- 确保 localhost 权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

mysql 分区#

先给原有数据分区#

alter table tbName partition BY RANGE (fieldName) (
PARTITION p201802 VALUES LESS THAN (TO_DAYS('2018-03-01')),
PARTITION p201803 VALUES LESS THAN (TO_DAYS('2018-04-01'))
);

查询分区#

select
partition_name part,
partition_expression expr,
partition_description descr,
table_rows
from information_schema.partitions where
table_schema = schema()
and table_name='tbName';

自动增加分区函数(按月)#

DELIMITER $$
#该表所在数据库名称
USE `dbName`$$
DROP PROCEDURE IF EXISTS `create_partition_by_month`$$
CREATE PROCEDURE `create_partition_by_month`(IN_SCHEMANAME VARCHAR(64), IN_TABLENAME VARCHAR(64))
BEGIN
DECLARE ROWS_CNT INT UNSIGNED;
DECLARE PARTITIONNAME VARCHAR(16);
DECLARE ENDTIME_DATETIME VARCHAR(30);
SET PARTITIONNAME = DATE_FORMAT( NOW(), 'p%Y%m' );
SET ENDTIME_DATETIME = DATE_FORMAT((NOW() + INTERVAL 1 MONTH), '%Y-%m-01');
SELECT COUNT(*) INTO ROWS_CNT FROM information_schema.partitions
WHERE table_schema = IN_SCHEMANAME AND table_name = IN_TABLENAME AND partition_name = PARTITIONNAME;
IF ROWS_CNT = 0 THEN
SET @SQL = CONCAT( 'ALTER TABLE `', IN_SCHEMANAME, '`.`', IN_TABLENAME, '`',
' ADD PARTITION (PARTITION ', PARTITIONNAME, " VALUES LESS THAN (UNIX_TIMESTAMP('",
ENDTIME_DATETIME ,"')) ENGINE = InnoDB);" );
PREPARE STMT FROM @SQL;
EXECUTE STMT;
DEALLOCATE PREPARE STMT;
ELSE
SELECT CONCAT("partition `", PARTITIONNAME, "` for table `",IN_SCHEMANAME, ".", IN_TABLENAME, "` already exists") AS result;
END IF;
END$$
DELIMITER ;

新增事务#

DELIMITER $$
#该表所在的数据库名称
USE `datong_collect`$$
CREATE EVENT IF NOT EXISTS `gps_part_manage`
ON SCHEDULE EVERY 1 MONTH #执行周期,还有天、月等等
STARTS '2018-04-01 00:00:00'
ON COMPLETION PRESERVE
ENABLE
COMMENT 'Creating partitions'
DO BEGIN
#调用刚才创建的存储过程,第一个参数是数据库名称,第二个参数是表名称
CALL create_partition_by_month('datong_collect','tb_gps_trail');
END$$
DELIMITER ;

删除分区:#

alter table voice drop partition p201907;

获取时间#

select curdate(); #获取当前日期
select last_day(curdate()); #获取当月最后一天。
select DATE_ADD(curdate(),interval -day(curdate())+1 day); #获取本月第一天
select date_add(curdate()-day(curdate())+1,interval 1 month);# 获取下个月的第一天
select DATEDIFF(date_add(curdate()-day(curdate())+1,interval 1 month ),DATE_ADD(curdate(),interval -day(curdate())+1 day)) from dual;#获取当前月的天数

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
mysql 相关操作
https://zhangzhiwu.cn/posts/mysql/
作者
zZw
发布于
2023-11-07
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
zZw
看著窗外的光 分不清是路燈還是太陽
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
26
分类
10
标签
44
总字数
13,461
运行时长
0
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.14.5
文章许可
CC BY-NC-SA 4.0