MySQL5.7

docker安装mysql

  • docker pull mysql:5.7
1
2
3
4
5
6
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysal \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
  • vi /mydata/mysql/conf/my.cnf
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    [mysqld]
    init_connect='SET collation_connection=utf8_unicode_ci'
    init_connect='SET NAMES utf8'
    character-set-server=utf8
    collation-server=utf8_unicode_ci
    skip-character-set-client-handshake
    skip-name-resolve
    docker restart <docker_id>

MySQL5.7绿色版(免装版)的初始化和修改密码

附带5.7免安装版包地址

配置环境变量

系统—>高级系统设置—>环境变量—>系统变量

  1. 点击新建,变量名为:MYSQL_HOME,添加你的mysql文件夹所在位置。编辑Path,复制;%MYSQL_HOME%\bin到原有值的后面

  2. 配置my.ini文件
    在mysql根目录下新建my.ini文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    [client]                                                                                                             
    port=3306
    default-character-set=utf8mb4
    [mysqld]
    port=3306
    character_set_server=utf8mb4
    #安装路径
    basedir=D:\mysql-5.7.28-winx64
    #数据路径
    datadir=D:\mysql-5.7.28-winx64\data
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    # 允许最大连接数
    max_connections=200
    #log_output='FILE'表示将日志存入文件,默认值是'FILE' log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中.
    log-output=TABLE
    #随机指定一个不能和其他集群中机器重名的字符串,如果只有一台机器,那就可以随便指定了
    server_id=1918
    #开启binlog(下面是路径)
    log_bin = mysql-bin
    binlog_format = ROW
    [WinMySQLAdmin]
    D:\mysql-5.7.28-winx64\bin\mysqld.exe
  • 创建完成后进入下一步。

安装MySQL

  • 在输入框内输入cmd,以管理员的身份运行,注意这里一定一定一定要以管理员的身份运行,否则在安装过程中会出现因为管理权限不够而导致的Install/Remove of the Service Denied!(安装/卸载服务被拒绝),这一点非常重要!
  • 在cmd中进入到mysql\bin目录下:
  • 输入安装命令:mysqld -install,若出现Service successfully installed,证明安装成功;如出现Install of the Service Denied,则说明没有以管理员权限来运行cmd:
  • 然后继续输入命令:mysqld --initialize,此时不会有任何提示:
  • 再输入启动命令:net start mysql,出现以下提示证明MySQL启动成功:
1
2
3
4
5
6
7
8
9
10
11
如若无法启动,参照如下
1. 卸载
sc delete mysql
2. 在bin下执行如下命令:会获得一个临时密码,需要记录,之后会用到。
mysqld --initialize --user=mysql --console
3. 然后执行如下命令
mysqld --install
4. 进入服务页面启动mysql
5. cmd执行mysql -uroot -p,输入之前的临时密码,如果登录成功则成。
6. 修改临时密码,设置密码:
mysqladmin -u root -p password root
  • 设置MySQL密码
  • 在这里设置密码主要是为了解决:ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: NO)的问题
  • 首先停止MySQL服务,输入命令行net stop mysql:
  • 在mysql根目录下找到my.ini,在[mysqld]字段下任意一行添加skip-grant-tables,保存即可
  • 重启MySQL,输入启动命令:net start mysql,出现以下提示证明MySQL启动成功
  • 在输入命令mysql -u root -p,不需要输入密码,直接回车
  • 输入命令行use mysql,进入数据库:
  • 输入命令行update user set authentication_string=password("xxxxxx") where user="root";xxxxxx是设置的新密码,敲击回车后若出现以下信息,证明修改成功!
  • 手动停止MySQL服务,在win10搜索栏内输入服务,找到MySQL。点击右键,然后点击停止即可。
  • 然后在刚刚的my.ini文件中删除skip-grant-tables这一行,保存关闭。
  • 再次启动cmd(管理员身份),输入启动命令:net start mysql,再输入mysql -u root -p,再输入刚刚设置的密码
  • 然后输入命令行use mysql验证一下,结果报错:
  • 键入命令行alter user user() identified by "xxxxxx";(此我键入 alter user user() identified by "root";回车!)
  • 再次输入命令行use mysql验证一下,成功!

批量执行.sql

编写批处理文件(xxx.bat)

1
2
3
4
5
6
for %%i in (C:\Users\Administrator\Desktop\main\*.sql) do (
echo excute %%i
mysql -uroot -proot -D数据库 < %%i
)
echo success
pause

mysql5.7设置允许外部访问(转自https://blog.csdn.net/qq_17810899/article/details/90642207)

mysql 默认只允许本地的localhost访问。网上有一堆更改为允许外部访问的教程,但是由于mysql版本的原因,无一例外的都失败了。
最后在一篇文章发现了缺失的一个操作。所以现在记录一下
步骤

  • mysql -u root -p 登录数据库

  • use mysql; 选择基础信息数据库

  • select User,authentication_string,Host from user 查询数据库用户,在这里正常来说,应该都localhost

  • GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '123456'

  • 新增一个root用户,所有地址(%)的都可以访问,并且密码为123456 。这里可以根据你的情况酌情修改

  • flush privileges; 清除缓存,重新加载权限

1
2
3
4
一般来讲如果是旧版的mysql,以上的操作,就已经让数据库可以外部访问了。但是很遗憾,在mysql5.7中,上面还不足够。

你需要修改 /etc/mysql/mysql.conf.d/mysqld.cnf 文件。将其中的
bind-address 注释掉。然后重启数据库,搞定