1.mysql安装与卸载
1.1 docker下安装并启动mysql
#1.下载并启动容器(一行命令执行, 莫换行)
docker run --rm --name mysql5.7 -p 3306:3306 -v /my/mysql/datadir:/var/lib/mysql -v /my/mysql/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
#命令解析:
docker run时, 若docker中没有该资源, 会自动去下载pull, 然后run
--rm: 当容器退出时(如docker stop mysql5.7), 自动移除容器及其数据, "危险"
--name:容器名
--p:映射宿主主机端口
-v:挂载宿主目录到容器目录
-e:设置环境变量,此处指定root密码
-d:后台运行容器
(可采用docker run --help查看可用命令)
#2.进入mysql命令行
docker exec -it mysql5.7 mysql -uroot -p
#3.进入mysql所在宿主机
docker exec -it mysql5.7 /bin/bash
#4.此时可用navicat获sqlyog来连接该库即可
1.2 win10下安装 mysql8
#1.下载 mysql
https://downloads.mysql.com/archives/community/
#2.解压缩
#3.配置环境变量
此电脑-->属性-->高级系统设置-->环境变量-->用户变量(或者系统变量)--->
## 3.1 新建MYSQL_HOME 变量:
变量名: MYSQL_HOME
变量值(例如): E:\software\mysql-8.0.26-winx64
## 3.2 添加PATH变量:
PATH中新增: %MYSQL_HOME%\bin
#4.生成存放数据库的文件夹data
以'管理员身份'运行cmd,在任意路径下执行命令:mysqld --initialize-insecure --user=mysql
会在解压的路径下产生data文件夹。以后的建立的数据库都存在data里面。
#5.安装MySQL服务
以'管理员身份'运行cmd,执行命令:mysqld -install
#6.启动服务
以'管理员身份'运行cmd,执行命令:net start mysql
#这里不用需要配置文件my.ini,用了这个反而服务启动不起来。
#7.登录MySQL
打开命令窗口,输入登录命令:mysql -u root -p 后会弹出让输入密码的提示。
这时候刚刚安装好,root是没有密码的,所以直接按回车键就可以进入mysql了。
#8.修改MySQL密码(命令后面的分号一定不能落掉):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
1.3 配置 centos7 自带的 MariaDB
#1.下载 MariaDB
yum install -y mariadb-server mariadb
#2.启动数据库:
systemctl start mariadb 或者
systemctl start mysqld.service 或者
systemctl mariadb.service start
#3.添加到开机启动:
systemctl enable mariadb.service
#4.对数据库进行一些基本设置, 一路回车或按y回车即可
(需要设置密码时好好设置密码即可, 比如设置密码为123456)
mysql_secure_installation
#5.vi /etc/my.cnf
在[mysqld]标签下添加如下内容:
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
#6.vi /etc/my.cnf.d/client.cnf
在[client]标签下添加如下内容:
default-character-set=utf8
#7.vi /etc/my.cnf.d/mysql-clients.cnf
在[mysql]标签下添加如下内容:
default-character-set=utf8
#8.重启服务:
systemctl restart mariadb
#9.开启远程连接:
首先登陆:mysql -uroot -p 回车以后输入密码, 然后执行命令开启远程连接:
grant all privileges on *.* to 'root'@'%'identified by '123456';
#10.刷新配置:
flush privileges;
#11.使用navicat连接即可.
1.99 常见问题
1.99.1 Navicat 等 MySQL 客户端工具连接 Mysql8 连接提示
Client does not support authentication protocol requested by server; consider upgrading MySQL client
》mysql -uroot -p 回车后输入密码, 然后执行下述命令即可
》USE mysql;
》ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
》FLUSH PRIVILEGES;
1.n 用户管理
#root用户进入
mysql -u root -p
#给用户分配权限
grant usage on *.* to 'zhangyu'@'%' identified by 'zhangyu' with grant option;
#创建数据库
create database springboot;
#赋予该用户数据库权限
grant all privileges on springboot.* to zhangyu@'%' identified by 'zhangyu';
2.数据预置
2.1.方法1(原生jdbc):
package com.zy.demo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;
import java.util.concurrent.locks.ReentrantLock;
public class BatchInsert extends Thread {
//定义锁对象
private final ReentrantLock lock=new ReentrantLock();
public void run() {
String url = "jdbc:mysql://192.168.0.199/batch_insert";
String name = "com.mysql.jdbc.Driver";
String user = "root";
String password = "123456";
Connection conn = null;
try {
Class.forName(name);
conn = DriverManager.getConnection(url, user, password);//获取连接
conn.setAutoCommit(false);//关闭自动提交,不然conn.commit()运行到这句会报错
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
// 开始时间
Long begin = new Date().getTime();
// sql前缀
String prefix = "INSERT INTO stu (id,name,lang) VALUES ";
try {
// 保存sql后缀
StringBuffer suffix = new StringBuffer();
// 设置事务为非自动提交
conn.setAutoCommit(false);
// 比起st,pst会更好些
PreparedStatement pst = (PreparedStatement) conn.prepareStatement("");//准备执行语句
// 外层循环,总提交事务次数
suffix = new StringBuffer();
for (int i = 1; i <= 10; i++) {
// 第j次提交步长
for (int j = 1; j <= 100; j++) {
// 构建SQL后缀
for (int k = 1; k <= 100; k++) {
suffix.append("('a" + i + "','b" + j + "','c" + k + "'),");
}
}
}
// 构建完整SQL
String sql = prefix + suffix.substring(0, suffix.length() - 1);
// 添加执行SQL
pst.addBatch(sql);
// 执行操作
pst.executeBatch();
// 提交事务
conn.commit();
// 清空上一次添加的数据
suffix = new StringBuffer();
// 头等连接
pst.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
// 结束时间
Long end = new Date().getTime();
// 耗时
System.out.println("100万条数据插入花费时间 : " + (end - begin) / 1000 + " s"+" 插入完成");
}
}
package com.zy.demo;
public class BatchInsertTest {
public static void main(String[] args) {
for (int i = 1; i <=10; i++) {
new BatchInsert().start();
}
}
}