少小离家老大回,乡音无改鬓毛衰
⒈.IDEA2018设置使用主题颜色
IDEA2018主题颜色分为三种:idea原始颜色,高亮色,黑色
设置方法:Settings--Appearance&Behavior--Appearance
⒉.mysql中,没有my.ini,只有my-defaule.ini,查找修改并保存my.ini
因为mysql5.7中文乱码的原因,所以需要找到my.ini文件修改编码,但进入mysql安装目录,找不到my.ini,只有my-default.ini。
在Windows 10中,MySQL5.7的my-default.ini和my.ini不是同一个文件,在不同的文件路径下!在隐藏文件夹C:\ProgramData\中,先进入C盘,点左上角的查看,然后勾选隐藏的项目,此时会出现ProgramData文件夹,进入找到mysql
里面就有my.ini
然后用记事本打开my.ini 修改 保存。
⒊.[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
解决方法
1、在windows环境下,MySQL的安装路径中有一个my.ini文件,在里面加入以下内容:
(一定要在[mysqld] 下面添加)
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
2、在虚拟机环境下的/etc/my.cnf配置文件的[mysqld] 下添加以下内容:
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
重启MySQL即可
⒋.登入MySQL数据库grant无法授权 1044 - Access denied for user 'root'@'%' to database 'blog'
一、检查user
表中root@'%'
的grant
的权限
select HOST,USER,Grant_priv,Super_priv from mysql.`user`;
可以看到现在这两个权限都是N
二、更新它们为Y
,然后重启mysql
update mysql.user set Grant_priv='Y',Super_priv='Y' where user = 'root' and host = '%';
#加载授权
flush privileges;
三、重启mysql
service mysqld restart
测试一下再执行grant
语句就成功了
⒌.MySQL 用户权限说明
客户端执行 SQL 语句查看权限列表:
DESC mysql.user;
权限说明如下:
- Select_priv:通过 SELECT 命令选择数据
- Insert_priv:通过 INSERT 命令插入数据
- Update_priv:通过 UPDATE 命令修改现有数据
- Delete_priv:通过 DELETE 命令删除现有数据
- Create_priv:通过 CREATE 命令创建新的数据库和表
- Drop_priv:通过 DROP 命令删除现有数据库和表
- Reload_priv:使用 FLUSH 语句或与之等效的 mysqladmin 命令刷新主机、刷新日志、刷新特权、刷新状态、刷新表、刷新线程
- Shutdown_priv:关闭服务器。将此权限提供给 root 账户之外的任何用户时,都应当非常谨慎
- Process_priv:使用 SHOW PROCESSLIST 语句查看服务的线程信息
- File_priv:使用 LOAD DATA 、SELECT ... INTO OUTFILE 语句和 LOAD_FILE 函数在服务器主机上读写任意文件
- Grant_priv:将该用户自己的权限授予其他用户
- References_priv:创建/删除外键,创建/删除外键时需要操作者有此特权
- Index_priv:创建/删除索引
- Alter_priv:使用 ALTER 语句重命名或修改表结构
- Show_db_priv:使用 SHOW DATABASES 语句查看服务器上所有数据库的名字。无此特权的用户只能看到自己权限内的数据库的名字
- Super_priv:超级用户(待补充)
- Create_tmp_table_priv:使用 CREATE TEMPLATE TABLE 语句创建临时表。服务器不会对临时表做任何权限检查,操作者可以对临时表执行任意操作
- Lock_tables_priv:使用 LOCK TABLES 语句锁定操作者拥有 SELECT 权限的数据表。锁定数据表后,其他会话暂无对该表的读写操作权
- Execute_priv:执行存储操作(待补充)
- Repl_slave_priv:复制服务器。在查询操作量巨大的使用场景下,需要一台或多台从属服务器来分担主服务器的查询工作。创建从属服务器通常采用复制的方法,执行复制操作的用户需要此权限
- Repl_client_priv:查询复制服务器操作的执行状况。执行 SHOW MASTER STATUS 、SHOW SLAVE STATUS 和 SHOW BINARY LOGS 语句查看复制得到的从属服务器的状态,拥有复制服务器权限的用户默认拥有执行这三个语句的权限
- Create_view_priv:创建视图
- Show_view_priv:查看视图
- Create_routine_priv:创建例程。例程包括 PROCEDURE 和 FUNCTION
- Alter_routine_priv:修改和删除例程
- Create_user_priv:针对用户和角色的增删改查操作
- Event_priv:针对事务的增删改查操作
- Trigger_priv:针对触发器的增删改查操作
- Create_tablespace_priv: 针对表空间和日志文件组的增删改查操作。表空间就是存放数据表及其数据的地方
⒍.数据库密码忘记了怎么办
方法1: 用SET PASSWORD命令
首先登录MySQL。
格式:mysql> set password for 用户名@localhost = password('新密码');
例子:mysql> set password for root@localhost = password('123');
方法2:用mysqladmin
格式:mysqladmin -u用户名 -p旧密码 password 新密码
例子:mysqladmin -uroot -p123456 password 123
方法3:用UPDATE直接编辑user表
首先登录MySQL。
mysql> use mysql;
mysql> update user set password=password('123') where user='root' and host='localhost';
mysql> flush privileges;
注意,MySQL的密码字段可能变为了authentication_string
方法4:在忘记root密码的时候,可以这样
以windows为例:
- 关闭正在运行的MySQL服务。
- 打开DOS窗口,转到mysql\bin目录。
- 输入mysqld --skip-grant-tables 回车。--skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。
- 再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysql\bin目录。
- 输入mysql回车,如果成功,将出现MySQL提示符 >。
- 连接权限数据库: use mysql; 。
- 改密码:update user set password=password("123") where user="root";(别忘了最后加分号) 。
- 刷新权限(必须步骤):flush privileges; 。
- 退出 quit。
- 注销系统,再进入,使用用户名root和刚才设置的新密码123登录。
改完数据库密码还要去phpadmin的配置文件更新
打开你安装的xampp目录,找到phpMyAdmin,打开它,找到config.inc.php ,用记事本或UE打开,可以看到它的密码是空的,加上你修改过的密码,保存,然后重启一下阿帕奇和mysql,再打开xampp的控制面板中MySQL的Admin即可
⒎mysql数据库的默认密码是多少
简介:本文主要介绍MySQL的默认密码是什么,以及如何修改默认密码。
MySQL是一种常用的关系型数据库管理系统,它是一种开源的软件,可以免费使用。在安装MySQL时,系统会要求设置root用户的密码,但是有些情况下,用户可能会忘记设置密码或者使用了默认密码,这时候就需要知道MySQL的默认密码是什么了。
MySQL的默认密码在不同版本中可能会有所不同,但是大部分情况下默认密码都是空的,也就是没有密码。如果您在安装MySQL时没有设置密码,那么您可以尝试使用空密码进行登录,也就是直接按回车键即可。
如果您无法使用空密码进行登录,那么您可以尝试使用一些常见的默认密码,例如"password"、"123456"等。但是需要注意的是,这些默认密码并不是所有版本都适用,而且使用默认密码会存在一定的安全风险,因此强烈建议您尽快修改密码。
如何修改MySQL的密码?
如果您需要修改MySQL的密码,可以按照以下步骤进行操作:
- 进入MySQL命令行界面,输入以下命令:
ysql -u root -p
-
系统会提示您输入密码,如果密码正确,就可以进入MySQL的命令行界面了。
-
输入以下命令,修改root用户的密码:
ewpassword';
ewpassword是您想设置的新密码,可以根据需要进行修改。
- 修改完成后,输入以下命令退出MySQL命令行界面:
exit;
MySQL的默认密码大部分情况下是空的,如果无法登录可以尝试使用一些常见的默认密码。建议尽快修改密码,以提高数据库的安全性。修改MySQL密码可以通过进入命令行界面,并使用ALTER USER命令进行操作。
⒏.java多线程去拷贝数据库方法
场景:
2个数据库,一个数据库的表拷贝到另一个库里面
代码:
java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class DatabaseCopy {
// 数据库连接配置
private static final String SOURCE_DB_URL = "jdbc:mysql://localhost:3306/XXX";
private static final String SOURCE_DB_USERNAME = "root";
private static final String SOURCE_DB_PASSWORD = "root";
private static final String TARGET_DB_URL = "jdbc:mysql://localhost:3306/YYY";
private static final String TARGET_DB_USERNAME = "root";
private static final String TARGET_DB_PASSWORD = "root";
// 源表和目标表配置
private static final String[] TABLE_NAMES = {"all_XXX"};
private static final String TARGET_TABLE_NAME = "all_YYY";
// 增加线程池大小,例如10个线程
private static final int THREAD_POOL_SIZE = 10;
public static void main(String[] args) {
long startTime = System.currentTimeMillis(); // 记录开始时间
int tablesCopied = 0; // 记录复制的表格数量
try {
// 连接源数据库
Connection sourceConnection = DriverManager.getConnection(SOURCE_DB_URL, SOURCE_DB_USERNAME, SOURCE_DB_PASSWORD);
// 连接目标数据库
Connection targetConnection = DriverManager.getConnection(TARGET_DB_URL, TARGET_DB_USERNAME, TARGET_DB_PASSWORD);
for (String tableName : TABLE_NAMES) {
// 获取源表结构
String sourceTableStructureQuery = "SHOW CREATE TABLE " + tableName;
Statement structureStatement = sourceConnection.createStatement();
ResultSet structureResult = structureStatement.executeQuery(sourceTableStructureQuery);
if (structureResult.next()) {
String createTableStatement = structureResult.getString(2);
// 创建相同结构的表格在目标数据库
Statement createTableStatementTarget = targetConnection.createStatement();
createTableStatementTarget.execute(createTableStatement);
tablesCopied++; // 增加复制的表格数量
} else {
System.err.println("未能获取表格结构:" + tableName);
}
}
// 复制数据
ExecutorService executorService = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
for (int i = 0; i < THREAD_POOL_SIZE; i++) {
executorService.submit(() -> {
Connection threadSourceConnection = null;
Connection threadTargetConnection = null;
try {
threadSourceConnection = DriverManager.getConnection(SOURCE_DB_URL, SOURCE_DB_USERNAME, SOURCE_DB_PASSWORD);
threadTargetConnection = DriverManager.getConnection(TARGET_DB_URL, TARGET_DB_USERNAME, TARGET_DB_PASSWORD);
threadTargetConnection.setAutoCommit(false); // 禁用自动提交以使用事务
for (String tableName : TABLE_NAMES) {
String copyDataQuery = "INSERT INTO " + TARGET_TABLE_NAME + " SELECT * FROM " + tableName;
System.out.println(copyDataQuery);
Statement copyStatement = threadTargetConnection.createStatement();
int rowsCopied = copyStatement.executeUpdate(copyDataQuery);
System.out.println("线程 " + Thread.currentThread().getName() + " 成功复制 " + rowsCopied + " 行数据到目标数据库中的 " + TARGET_TABLE_NAME + " 来自表格 " + tableName);
}
// 提交事务
threadTargetConnection.commit();
} catch (SQLException e) {
e.printStackTrace();
// 回滚事务以确保数据一致性
try {
if (threadTargetConnection != null) {
threadTargetConnection.rollback();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
} finally {
try {
if (threadTargetConnection != null) {
threadTargetConnection.close();
}
if (threadSourceConnection != null) {
threadSourceConnection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
});
}
// 关闭线程池
executorService.shutdown();
while (!executorService.isTerminated()) {
Thread.sleep(100);
}
// 关闭连接
sourceConnection.close();
targetConnection.close();
long endTime = System.currentTimeMillis(); // 记录结束时间
long totalTime = endTime - startTime; // 计算总时间
System.out.println("成功复制 " + tablesCopied + " 张表格到目标数据库,总用时:" + totalTime + " 毫秒");
} catch (SQLException | InterruptedException e) {
e.printStackTrace();
}
}
}
写的不严谨,代码里面现在有问题只能复制表,插入数据不了数据,大家自己解开问题。