少小离家老大回,乡音无改鬓毛衰
IDEA2018主题颜色分为三种:idea原始颜色,高亮色,黑色
设置方法:Settings–Appearance&Behavior–Appearance
因为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 修改 保存。
解决方法
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即可
一、检查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
语句就成功了
客户端执行 SQL 语句查看权限列表:
DESC mysql.user;
权限说明如下:
首先登录MySQL。
格式:mysql> set password for 用户名@localhost = password('新密码');
例子:mysql> set password for root@localhost = password('123');
格式:mysqladmin -u用户名 -p旧密码 password 新密码
例子:mysqladmin -uroot -p123456 password 123
首先登录MySQL。
mysql> use mysql;
mysql> update user set password=password('123') where user='root' and host='localhost';
mysql> flush privileges;
注意,MySQL的密码字段可能变为了authentication_string
以windows为例:
MySQL是一种常用的关系型数据库管理系统,它是一种开源的软件,可以免费使用。在安装MySQL时,系统会要求设置root用户的密码,但是有些情况下,用户可能会忘记设置密码或者使用了默认密码,这时候就需要知道MySQL的默认密码是什么了。
MySQL的默认密码在不同版本中可能会有所不同,但是大部分情况下默认密码都是空的,也就是没有密码。如果您在安装MySQL时没有设置密码,那么您可以尝试使用空密码进行登录,也就是直接按回车键即可。
如果您无法使用空密码进行登录,那么您可以尝试使用一些常见的默认密码,例如“password”、“123456”等。但是需要注意的是,这些默认密码并不是所有版本都适用,而且使用默认密码会存在一定的安全风险,因此强烈建议您尽快修改密码。
如果您需要修改MySQL的密码,可以按照以下步骤进行操作:
1. 进入MySQL命令行界面,输入以下命令:
ysql -u root -p
2. 系统会提示您输入密码,如果密码正确,就可以进入MySQL的命令行界面了。
3. 输入以下命令,修改root用户的密码:
ewpassword';
ewpassword是您想设置的新密码,可以根据需要进行修改。
4. 修改完成后,输入以下命令退出MySQL命令行界面:
exit;
MySQL的默认密码大部分情况下是空的,如果无法登录可以尝试使用一些常见的默认密码。建议尽快修改密码,以提高数据库的安全性。修改MySQL密码可以通过进入命令行界面,并使用ALTER USER命令进行操作。
场景:
2个数据库,一个数据库的表拷贝到另一个库里面
代码:
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();
}
}
}
写的不严谨,代码里面现在有问题只能复制表,插入数据不了数据,大家自己解开问题。