linux上搭建mysql8.0
准备:CentOS 7.0虚拟机,mysql安装包:mysql-8.0.20-el7-x86_64.tar.gz
1、检查我们系统是否默认安装mysql,或者以前安装过mysql
rpm -qa | grep mysql
rpm -qa |grep mariadb
如果有利用 rpm -e --nodeps 命令卸载掉
2、解压我们准备的软件,并且移动到/usr/local/目录下,并重命名成mysql(大多数人都这样做,我们也这样做比较好)
解压:tar xvf mysql-8.0.20-el7-x86_64.tar.gz
移动并且重命名:mv mysql-8.0.20-el7-x86_64 /usr/local/mysql
3、创建各种目录
mkdir /var/lib/mysql 进程数据目录
mkdir /usr/local/mysql/data 数据的目录
mkdir /usr/local/mysql/log 日志目录
4、创建mysql的用户组和用户
groupadd mysql 创建用户组
useradd -r -g mysql -s /bin/false mysql (在mysql目录下执行,否则这个命令是找不到bin目录的,创建一个空的不能登录的组)
给用户和组授权:
chown -R mysql:mysql /var/lib/mysql
chown -R mysql:mysql /usr/local/mysql
5、设置环境变量
vi ~/.bash_profile
修改成
登出:exit
再重新连接:
输入:which mysql查看MySQL是否已经有了
如果有了,那么环境变量生效加入配置文件
6、修改配置文件
vi /etc/my.cnf
内容开始
[mysql]
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.sock
[mysqld]
port=3306
socket=/var/lib/mysql/mysql.sock
basedir=/usr/local/mysql
character-set-server=utf8mb4
default-storage-engine=INNODB
innodb_buffer_pool_size=200M
max_allowed_packet=16M
explicit_defaults_for_timestamp=1
log-output=FILE
general_log=0
general_log_file=/usr/local/mysql/log/fgedu02-general.err
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/log/fgedu02-query.err
long_query_time=10
log-error=/usr/local/mysql/log/fgedu02-error.err
default-authentication-plugin=mysql_native_password
内容结束
7、初始化
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
验证是否初始化成功:
进入log目录
cd /usr/local/mysql/log/
查看是否生成日志文件,日志文件中的内容再查看下
tail -100f fgedu02-error.err
记录下当前的临时密码,后面有用
8、创建启动脚本
vi /usr/lib/systemd/system/mysqld.service
内容开始
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 65536
LinitNPROC = 65536
内容结束
修改文件权限
chmod u+x /usr/lib/systemd/system/mysqld.service
9、各种启动方式及查看状态
重新装载:systemctl daemon-reload
启动我们的mysql:systemctl start mysqld
停止mysql:systemctl stop mysqld
设置开机自动启动:systemctl enable mysqld
查看状态:systemctl status mysqld
启动成功长这样:

nohup /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf&
(这种进程是杀不死的,需要密码才能停止)
停止
mysqladmin -uroot -p shutdown -S /var/lib/mysql/mysql.sock
(这里是需要密码的,其实在这边就要先完成修改密码才能操作)
10、修改密码及远程登录
使用之前的临时密码会报错,我们需要去修改密码
mysql -uroot -p
进入mysql,使用之前的密码进入;
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘root’;
把密码改成了root
创建远程登录用户:
切换到数据库
use mysql
创建用户
create USER ‘root’@’%‘IDENTIFIED WITH mysql_native_password BY ‘root’;
授权用户
grant all privileges on . to ‘root’@’%’ with grant option;
查询
select host,user from user where user=‘root’;
到此数据库搭建完成,可以远程连接使用;
主从架构
决定系统下限的就是数据库。微服务,缓存都是为了保护数据库,而数据库的并发是数据库中最脆弱的,在实际工作中非常的重要,比微服务之类的东西来的更加直接,有效。
主从结构理论
好处
数据安全:给主服务器增加了一个数据备份,
读写分离:java很多读多写少,增加主从架构后,主服务器只负责写,从服务器来负责写
故障转移,高可用:
主服务器宕机后,可由一台从服务器切换成主服务器,继续提供数据读写功能。数据访问压力即使没那么大,高可用也是必须要搭建的。
同步原理
1、主节点打开他的binlog
2、从节点会有一个线程去通知主节点他要读取整个binlog日志
3、主节点启动一个dump线程,dump线程往从节点推送自己的binlog日志,从节点会把主节点推送过来的binlog写到Relaylog日志中去。
4、从节点把relaylog中的数据,异步的重演写入。
搭建主从架构
准备两台mysql服务
1、修改主节点的配置文件 vi /etc/my.cnf (核心配置文件)
server-id:服务节点的唯一标识
log_bin:打开Binlog日志记录,并指定文件名
log_bin-index:Binlig日志文件
主节点
从节点
2、进入数据库修改
进入主节点数据库;
输入指令show master status;
file:记录到什么文件
position:文件的什么位置
进入从节点数据库
需要把注节点的一些信息配置给从节点
配置信息开始
CHANGE MASTER TO
MASTER_HOST=‘192.168.88.3’,
MASTER_PORT=3306,
MASTER_USER=‘root’,
MASTER_PASSWORD=‘root’,
MASTER_LOG_FILE=‘master-bin.000001’,
MASTER_LOG_POS=156,
GET_MASTER_PUBLIC_KEY=1;
配置信息结束
查看当前从节点信息
show slave status \G(\G变成有序的查看)
主从同步搭建完成;
需要注意
1、主库的操作能够被写到从节点上,从节点的数据不会同步到主库中,所以必须只能在主库中写,从库只能读取;单向同步
2、如果只需要同步一部分的数据库怎么做
Binlog_Do_DB:哪些数据库需要被复制
Binlog_Ignore_DB:哪些数据库不需要被复制
在vi /etc/my.cnf中可以修改;
在主节点的地方添加这个配置,那么只有lyd数据库可以被同步,其他的数据库则不会同步。
配置完成后即可在这里被显示了。
反之也可以配置什么表不能被同步;
(配置好以后需要重启mysql)
从节点配置:
#如果salve库名称与master库名相同,使用本配置
replicate-do-db = lyd
#如果master库名[lyd]与salve库名[lyd01]不同,使用以下配置[需要做映射]
replicate-rewrite-db =lyd -> lyd01
#如果不是要全部同步[默认全部同步],则指定需要同步的表
replicate-wild-do-table=lyd01.biaoming1
replicate-wild-do-table=lyd01.biaoming2
(配置好以后需要重启mysql)
配置互相为主从
按照上面主从节点的配置,再反过来配置一次,就能配置成互为主从的配置,也可以这样扩展成环状多组多从的配置。但是如果有一个节点挂了,链条就断了,我需要赶紧改链条,复杂且费钱,有自动改的方案,mysql原生的只支持到这边。