一.安装

1.从网上下载MySQL8.0.12版本,下载地址:https://dev.mysql.com/downloads/mysql/

2. 下载完成后解压

我解压的路径是:D:\Java\mysql-8.0.12-winx64

3. 配置文件

首先在解压的路径下查看是否含有my.ini的文件,如果没有则新建一个,内容如下:

[mysqld]
# 设置3306端口
port=
# 设置mysql的安装目录
basedir=D:\Program Files\MySQL
# 设置mysql数据库的数据的存放目录
datadir=D:\Program Files\MySQL\Data
# 允许最大连接数
max_connections=
# 允许连接失败的次数。
max_connect_errors=
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=
default-character-set=utf8

4. 数据库配置

通过管理员权限进入cmd(如果不是管理员权限就会出现问题),进入MySQL安装目录的bin目录下

接着输入mysqld --initialize --console,就会出现以下画面,其中标红的为数据库root用户的初始密码,一定要牢记,后面登录需要用到,当然要是不小心关掉了或者没记住,删掉初始化的 data目录,再执行一遍初始化命令又会重新生成。

再然后输入mysqld --install安装mysql服务,输入net start mysql启动服务,备注:mysqld --remove是卸载MySQL服务,net stop mysql是停止服务。

5. 进入数据库的配置

输入mysql -u root -p后会让你输入密码,密码为前面让你记住的密码,输入正确后就会出现如下界面,表示进入了MySQL命令模式。

新用户需要修改密码先,输入alter user user() identified by "新密码";

use mysql;

接着更改密码,输入ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';  出现如下界面表示更改成功。

到此,MySQL8.0.12数据库就安装完成了。

可选配置:使用root远程登录输入update user set host ='%' where user ='root';

保存flush privileges;

二.数据库相关配置

查看默认数据库:show databases;

选择mysql数据库:use mysql

查看默认MySQL用户:select host, user, authentication_string, plugin from user;

创建新用户: CREATE USER '用户名'@'host名称' IDENTIFIED WITH mysql_native_password BY '密码';

给新用户授权:GRANT ALL PRIVILEGES ON *.* TO '用户名'@'host名称';

刷新权限: FLUSH PRIVILEGES;

三.问题详解

1. MySQL8.0.12不能连接Navicat

原因:MySQL8.0与MySQL5.0所采用的加密方式规则不一样,所以导致 Navicat打不开。可通过select host, user, authentication_string, plugin from user;查看密码的规则。

如上图,plugin这一列就是对应用户的加密规则,可以看到我的root用户的加密规则是:mysql_native_password,这是因为我已经设置过了,默认的是:caching_sha2_password,所以我们只需要将默认的caching_sha2_password改为mysql_native_password即可。

解决方案:输入ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';即可修改root用户的加密规则以及密码。

2. 授权出错,显示You are not allowed to create a user with GRANT

原因:在网上有很多教程说当出现The user specified as a definer ('root'@'%') does not exist时表示root用户权限不足,只需要执行GRANT ALL ON *.* TO 'root'@'%';就可以了,但是往往又会出现You are not allowed to create a user with GRANT的错误提示。这是因为GRANT ALL ON *.* TO 'root'@'%';这条语句中@'%'中的百分号其实是root用户对应host的名称,很多人并没有注意到他的root用户对应的其实是localhost,直接就执行了上面的语句,所以才会报错。

解决方案:只要将GRANT ALL ON *.* TO 'root'@'%';中的%改为对应的host名称即可,最后还要刷新一下权限FLUSH PRIVILEGES; 

特别说明:网上说%表示通配所有的host,但是操作时并不成功,不明白是为什么,我猜想可能与MySQL8.0版本有关系。

4、配置新数据库的主从复制

4.1、修改主库配置文件

注意!注意!注意!:配置文件一定要保存成ASNI存储方式,不然会报错

在主从的服务器上分别找到以下路径的my.ini文件

主数据库配置的mysqld节点下加入

[mysqld]
log-bin=mysql-bin #从库会基于此log-bin来做复制
binlog-do-db=mytest #用于读写分离的具体数据库,这里我创建了mytest作测试
binlog_ignore_db=mysql #不用于读写分离的具体数据库
binlog_ignore_db=information_schema #和binlog-do-db一样,可以设置多个
#选择row模式
binlog-format=ROW
server-id=

从数据库配置配置的mysqld节点下加入

[mysqld]
log-bin=mysql-bin #从库会基于此log-bin来做复制
replicate-do-db=mytest #用于读写分离的具体数据库,这里我创建了mytest作测试
#选择row模式
binlog-format=ROW
server-id=

5、配置主数据库

开启主数据库服务,创建用来测试读写分离的数据库
对用户授权使其用于复制主库数据

注意:下面的语句要用root来执行

CREATE USER 'slave123'@'192.168.103.%' IDENTIFIED BY '';#创建用户
GRANT REPLICATION SLAVE ON *.* TO 'slave123'@'192.168.103.%';#授权
flush privileges;

用户名:slave123
密码:123456

然后查询主数据库状态,并记录下File和Position字段的值

mysql> show master status;
+------------------+----------+--------------+--------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+--------------------------+-------------------+
| mysql-bin. | | mytest | mysql,information_schema | |
+------------------+----------+--------------+--------------------------+-------------------+
row in set (0.02 sec)

6、配置从数据库

开启从数据库服务,手动创建测试读写分离的库,这边不会帮你自动创建,同时也创建和主库一样的用户,我这里还是先停止从库

stop slave;

设置它的master

change master to
master_host='192.168.103.207',
master_port=,
master_user='slave123',
master_password='',
master_log_file='mysql-bin.000002',
master_log_pos=155;

注:这里的 master_log_filemaster_log_pos就是配置主数据库查询到的FilePosition

启动从库

start slave;

检查是否启动成功

show slave status;

如果Slave_IO_State字段显示 Waiting for master to send event说明成功,当然你也可以在主库表中插入一条数据,看看从库是否有同步,到这里,已经配置好主从同步了。

7、配置Mysql-Proxy

下载 mysql-proxy-0.8.5-windows-x86-32bit 解压到任意位置,它是绿色免安装版的,创建配置文件 mysql-proxy.conf,内容如下

[mysql-proxy]
admin-username=root
admin-password=root
admin-lua-script=C:/mysql-proxy-0.8.-windows-x86-32bit/lib/mysql-proxy/lua/admin.lua
proxy-backend-addresses=192.168.103.207:
proxy-read-only-backend-addresses=192.168.103.208:
proxy-lua-script=C:/mysql-proxy-0.8.-windows-x86-32bit/share/doc/mysql-proxy/rw-splitting.lua
log-file=C:/mysql-proxy-0.8.-windows-x86-32bit/log/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true

admin-username:用于中间件连接的用户,这里我还是用root偷懒
admin-password:同上用户密码
admin-lua-script:根据存放的文件位置自行调整
proxy-backend-addresses:主库服务器+端口
proxy-read-only-backend-addresses:从库服务器+端口,多个从库用,隔开
proxy-lua-script:根据存放的文件位置自行调整
log-file:日志文件存放位置,如果你指定了一个路径,请确保手动创建了对应的文件夹,否则会报错
log-level:日志级别
daemon:以守护进程方式运行
keepalive:长连接

将上面创建的文件复制到mysql-proxy-0.8.5-windows-x86-32bit的bin目录中
创建install.bat文件,内容如下

"C:\mysql-proxy-0.8.5-windows-x86-32bit\bin\mysql-proxy.exe" -P 192.168.103.203: --defaults-file="C:\mysql-proxy-0.8.5-windows-x86-32bit\bin\mysql-proxy.conf"

也放在mysql-proxy-0.8.5-windows-x86-32bitbin目录中,双击运行
接下来,用你的客户端工具连接 192.168.103.203:6217(6217这个端口随便设置,跟上面的bat里面一致就行),测试是否可以能正常连接,如果能连接,但是不能显示读写分离的数据库,那一般是权限设置问题

8、配置Atlas

下载Atlas会有两个版本,其中有个分表的版本,但是这个需要其他的依赖,我这边不需要分表这种需求,所以安装普通的版本

Atlas (普通) : Atlas-2.2.1.el6.x86_64.rpm

Atlas (分表) : Atlas-sharding_1.0.1-el6.x86_64.rpm

首先进入Linux的Home目录下,下载非分表的安装包

rpm -ivh Atlas-2.2..el6.x86_64.rpm 

安装好了,它会默认在”/usr/local/mysql-proxy”下给你生成4个文件夹,以及需要配置的文件,如下:

[root@localhost home]# ll /usr/local/mysql-proxy/
total
drwxr-xr-x. root root Dec : bin
drwxr-xr-x. root root Dec : conf
drwxr-xr-x. root root Dec : lib
drwxr-xr-x. root root Dec log
bin目录下放的都是可执行文件

. “encrypt”是用来生成MySQL密码加密的,在配置的时候会用到

. “mysql-proxy”是MySQL自己的读写分离代理

. “mysql-proxyd”是360弄出来的,后面有个“d”,服务的启动、重启、停止。都是用他来执行的

conf目录下放的是配置文件

. “test.cnf”只有一个文件,用来配置代理的,可以使用vim来编辑

lib目录下放的是一些包,以及Atlas的依赖

log目录下放的是日志,如报错等错误信息的记录

进入bin目录,使用encrypt来对数据库的密码进行加密,我的MySQL数据的用户名是buck,密码是hello,我需要对密码进行加密

[root@localhost bin]# ./encrypt
/iZxz+0GRoA=

配置Atlas,使用vim进行编辑

[root@localhost conf]# cd /usr/local/mysql-proxy/conf/
[root@localhost conf]# vim test.cnf

进入后,可以在Atlas进行配置,360写的中文注释都很详细,根据注释来配置信息,其中比较重要,需要说明的配置如下:

这是用来登录到Atlas的管理员的账号与密码,与之对应的是“#Atlas监听的管理接口IP和端口”,也就是说需要设置管理员登录的端口,才能进入管理员界面,默认端口是2345,也可以指定IP登录,指定IP后,其他的IP无法访问管理员的命令界面。方便测试,我这里没有指定IP和端口登录。

#管理接口的用户名
admin-username = user #管理接口的密码
admin-password = pwd 这是用来配置主数据的地址与从数据库的地址,这里配置的主数据库是135,从数据库是134 #Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
proxy-backend-addresses = 192.168.1.50: #Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
proxy-read-only-backend-addresses = 192.168.1.41:@ 这个是用来配置MySQL的账户与密码的,我的MySQL的用户是buck,密码是hello,刚刚使用Atlas提供的工具生成了对应的加密密码 #用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码!
pwds = buck:/iZxz+0GRoA= 这是设置工作接口与管理接口的,如果ip设置的”0.0.0.0”就是说任意IP都可以访问这个接口,当然也可以指定IP和端口,方便测试我这边没有指定,工作接口的用户名密码与MySQL的账户对应的,管理员的用户密码与上面配置的管理员的用户密码对应。 #Atlas监听的工作接口IP和端口
proxy-address = 0.0.0.0: #Atlas监听的管理接口IP和端口
admin-address = 0.0.0.0:

启动Atlas

[root@localhost bin]# pwd
/usr/local/mysql-proxy/bin [root@localhost bin]# ./mysql-proxyd test start OK: MySQL-Proxy of test is started

测试一下Atlas服务器的MySQL状态,要确认它是关闭状态,并且使用mysql命令,进不去数据库,前提是Atlas服务器也需要装mysql,直接运行  yum -y install mysql 就可以了。我们这里只需要mysql这个命令好使,就可以了。

[root@localhost bin]# /etc/init.d/mysqld status
mysqld is stopped
[root@localhost bin]# mysql
ERROR (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

确认系统中自带的MySQL进不去了,使用如下命令,进入Atlas的管理模式“mysql -h127.0.0.1 -P2345 -uuser -ppwd ”,能进去说明Atlas正常运行着呢,因为它会把自己当成一个MySQL数据库,所以在不需要数据库环境的情况下,也可以进入到MySQL数据库模式。

[root@localhost bin]# mysql -h127.0.0. -P2345 -uuser -ppwd
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is
Server version: 5.0.-agent-admin Copyright (c) , , Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>

可以访问“help”表,来看MySQL管理员模式都能做些什么。可以使用SQL语句来访问

mysql> select * from help;
+----------------------------+---------------------------------------------------------+
| command | description |
+----------------------------+---------------------------------------------------------+
| SELECT * FROM help | shows this help |
| SELECT * FROM backends | lists the backends and their state |
| SET OFFLINE $backend_id | offline backend server, $backend_id is backend_ndx's id |
| SET ONLINE $backend_id | online backend server, ... |
| ADD MASTER $backend | example: "add master 127.0.0.1:3306", ... |
| ADD SLAVE $backend | example: "add slave 127.0.0.1:3306", ... |
| REMOVE BACKEND $backend_id | example: "remove backend 1", ... |
| SELECT * FROM clients | lists the clients |
| ADD CLIENT $client | example: "add client 192.168.1.2", ... |
| REMOVE CLIENT $client | example: "remove client 192.168.1.2", ... |
| SELECT * FROM pwds | lists the pwds |
| ADD PWD $pwd | example: "add pwd user:raw_password", ... |
| ADD ENPWD $pwd | example: "add enpwd user:encrypted_password", ... |
| REMOVE PWD $pwd | example: "remove pwd user", ... |
| SAVE CONFIG | save the backends to config file |
| SELECT VERSION | display the version of Atlas |
+----------------------------+---------------------------------------------------------+
rows in set (0.00 sec) mysql>

也可以使用工作接口来访问,使用命令“mysql -h127.0.0.1 -P1234 -ubuck -phello”

[root@localhost bin]# mysql -h127.0.0. -P1234 -ubuck -phello
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is
Server version: 5.0.-log Copyright (c) , , Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>

你可以让数据库某一台down掉,来测试监控的可用性。从这里可以看出我们的监控是好使的,啦啦啦啦!!

如果工作接口可以进入了,就可以在Windows平台下,使用Navicat来连接数据库,填写对应的host,Port,用户名,密码就可以

9、读写分离测试

这里测试读写分离需要使用到Jmeter了,它是Java写第一套开源的压力测试工具,因为这个比较方便。他有专门测试MySQL的模块,需要使用MySQL的JDBC驱动jar包,配置很简单,东西很好很强大很好用。

Jmeter下载地址:http://jmeter.apache.org/download_jmeter.cgi

MySQL的JDBC  :http://dev.mysql.com/downloads/connector/j/

下载下来后,分别都解压开来,打开Jmeter ( 在bin路面下的jmeter.bat ) ,在测试计划中,导致JDBC的jar包

配置JDBC的驱动

分别做查询与插入语句

配置好了以后,就先运行查询操作,然后分别监控主数据库与从数据库所在机器的流量,来确定是否读写,使用“sar -n DEV 1 10000”命令来监控读写

先来测试写,目前数据库里面一条信息都没有,开启配置好了的Jmeter,进行写入数据测试

主数据库 ( 192.168.1.50 )

从数据库 ( 192.168.1.41 )

可以看到测试插入数据的操作时,主数据库的网卡流量很大,从数据库的流量很小,是应为主数据是主要负责写入的,而从数据库主要是负责同步的。

查看数据库,发现已经插入了6W多条数据了。

进行读取数据的测试,只需要执行查询就好,执行“select *from sbtest;”来查询数据表

主数据库 ( 192.168.1.50 )

从数据库 ( 192.168.1.41 )

可以看到135(50)数据库的流量非常大,134(41)没有什么流量,这下就可以确定了数据是从数据库读取的。已经实现了读写分离。

10、MySql开启日志监控

SHOW VARIABLES LIKE "general_log%";
SET GLOBAL general_log = 'ON';
show variables like 'datadir'

然后使用 BareTailProfessional 进行监控日志查看

10.1、删除日志文件

清空该表,具体操作如下:

SET GLOBAL general_log = 'OFF';
RENAME TABLE mysql.general_log TO mysql.general_log2;
DELETE FROM mysql.general_log2;

注意:当DELETE FROM mysql.general_log2执行删除表数据时,发现操作系统的数据文件还是存在的,需要手动删除该数据文件,再继续下面数据操作步骤

OPTIMIZE TABLE general_log2;
RENAME TABLE mysql.general_log2 TO mysql.general_log;
SET GLOBAL general_log = 'ON';

MySQL8.0.12 安装及配置、读写分离,主从复制的更多相关文章

  1. Apache2.4.34 + php 7.28 + MySQL8.0.12 安装及配置

    服务端的学习 Apache2.4.34 的安装及配置 1.基本安装 最新的 Apache 已经不提供 Windows 的安装版本,所以我们这里使用的是解压版 -下载地址:https://www.apa ...

  2. mysql-8.0.12安装和配置

    1.下载Mysql8.0.12压缩包.下载地址:https://dev.mysql.com/downloads/file/?id=480557 2.解压文件到本地指定目录.这里我的mysql根目录是: ...

  3. MySQL8.0.12安装及配置

    一.下载 下载页面http://dev.mysql.com/downloads/mysql/ 选择系统平台后,点击download(根据系统选择64或32位) 二.配置 1.下载成功后,解压安装包到要 ...

  4. 【MySQL-123】MySQL8.0.12 安装于Win10

    参考blog:MySQL8.0.12 安装及配置 [坑一]输入net start mysql时,MYSQL服务无法启动. 问题:第三步my.ini文件编码错误. 解决方案:https://blog.c ...

  5. MySql-8.0.12 安装教程

    MySql-8.0.12 安装教程随笔https://www.cnblogs.com/CrazyDemo/p/9409995.html MySQL 安装https://m.runoob.com/mys ...

  6. windows系统-phpstudy升级mysql8.0.12安装教程及修改密码和安装注意事项

    1.下载安装包,下载地址:mysql8.0.12  .如果你想要下载其它版本可以选择:mysql历史版本地址. 2.下载好,删除phpstudy的mysql目录.如果数据重要的,注意备份数据!同意把m ...

  7. MySql 8.0.12安装、配置

    1. 参考:① 菜鸟教程下载安装MySQl ② 8.0.12安装方法 以下是我遇到的问题: 2.执行 mysqd --initialize --console 后,这个时候运行突然报"无法启 ...

  8. mysql-8.0.12 安装+配置, Navicat Premium 12 安装+激活

    1.解压到安装目录,如:D:\mysql-8.0.12-winx64 2.将以下配置文件粘贴到安装目录,并保存为my.ini,注意:使用ansi 而非utf-8编码格式保存 [mysql] # 设置m ...

  9. mysql-8.0.12 安装使用教程

    Microsoft Windows [版本 10.0.15063] (c) 2017 Microsoft Corporation.保留所有权利. C:\WINDOWS\system32>D: D ...

随机推荐

  1. Y1吐槽001 怎么做产品

    做一个产品,这个产品是做给用户用的还是做给领导看的完全是两个不同的出发点..做给领导看有好处,毕竟领导有知道进展的权利和指导方向的作用,还有一个好处就是表现得好. 忽略了使用者的感受是非常致命的,标模 ...

  2. docker安装,无法正常启动

    报错信息: Job for docker.service failed because the control process exited with error code. See "sy ...

  3. The SQL Server instance returned an invalid or unsupported protocol version during login negotiatio

    在使用.net core 连接sqlserver的时候遇到了这个问题 从字面意思理解大致是个什么版本不支持, 谷歌一下吧,ok,看到这个2000我就知道什么问题了 我的数据库还是2000的,总算把20 ...

  4. linux mailbox模型

    一.device tree中的写法 二. mailbox框架 (driver/mailbox/mailbox.c) struct mbox_controller { struct device *de ...

  5. php基础-mysqli

    基本八个步骤 //连接数据库 $link = mysqli_connect('localhost', 'root', ''); //判断是否连接成功 if (!$link) { exit('数据库连接 ...

  6. mysql 零碎笔记

    聚合函数的用法: concat 连接单行记录的不同字段, group_concat 连接多行记录的相同字段, concat_ws count 按条件统计: SELECT COUNT(*) AS `nu ...

  7. scala 下 sigmoid 与breeze.numeric.sigmoid差异对比

    scala> val beforeInit = System.nanoTime;val handsgn = rd.map(x => 1.0 / (1.0 + Math.exp(-x))); ...

  8. nginx获取上游真实IP(ngx_http_realip_module)

    realip模块的作用是:当本机的nginx处于一个反向代理的后端时获取到真实的用户IP,如果没有realip模块,nginx的access_log里记录的IP会是反向代理服务器的IP,PHP中$_S ...

  9. ArrayList源码理解

    ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Col ...

  10. 十几分钟让你学会MySQL布尔和延迟盲注手工操作

    作者:Max老白Gān丶链接:http://www.lofter.com/lpost/1fefbc76_12d25dc31来源:LOFTER 注入常用到的几个函数   1 mid(str,1,3) 字 ...