一、安装mysql
1、下载
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
2、解压压缩包到目标位置
tar xvzf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.7.18-linux-glibc2.5-x86_64 /usr/local/
3、文件重命名
mv mysql-5.7.18-linux-glibc2.5-x86_64/ mysql
4、创建数据仓库目录
--/data/mysql 数据仓库目录
# mkdir /data/mysqldata
#ls /data/
5、新建mysql用户、组及目录
# ---新建一个msyql组
# useradd -r -s /sbin/nologin -g mysql mysql -d /usr/local/mysql ---新建msyql用户禁止登录shell
或者是:
[root@localhost mysql]# groupadd mysql
[root@localhost mysql]# useradd -r -g mysql mysql
6、改变目录属有者(授权)
#cd /usr/local/mysql
#pwd
#chown -R mysql .
#chgrp -R mysql .
#chown -R mysql /data/mysqldata
或者是
[root@001 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@001 mysql]# ldconfig
[root@001 mysql]# echo "PATH=$PATH:/usr/local/mysql/bin" > /etc/profile.d/mysql.sh
[root@001 mysql]# source /etc/profile.d/mysql.sh
[root@001 mysql]# chkconfig mysqld on
[root@001 mysql]# vim /etc/my.cnf
7、初始化mysqld
# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqldata
此处需要注意记录生成的临时密码,如上文结尾处的:>jf+sbhCQ3gV (后面会用到)
8、编辑配置文件及将mysql的服务脚本放到系统服务中,并配置环境变量让系统可以直接使用mysql的相关命令
[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@localhost mysql]# ldconfig
[root@localhost mysql]# echo "PATH=$PATH:/usr/local/mysql/bin" > /etc/profile.d/mysql.sh
[root@localhost mysql]# source /etc/profile.d/mysql.sh
[root@localhost mysql]# chkconfig mysqld on
[root@localhost mysql]# vim /etc/my.cnf
basedir=/usr/local/mysql #mysql路径
datadir=/data/mysqldata #mysql数据目录
socket=/tmp/mysql.sock
user=mysql
server_id=1 #MySQLid 后面2个从服务器需设置不同
port=3306
9、启动mysql
service mysqld start
如果报如下错误:
将 /etc/my.cnf文件改为:
[mysqld]
basedir=/usr/local/mysql #mysql路径
datadir=/data/mysqldata #mysql数据目录
socket=/tmp/mysql.sock
user=mysql
server_id=1 #MySQLid 后面2个从服务器需设置不同
port=3306
#datadir=/var/lib/mysql
#ervice mysqld startsocket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
#[mysqld_safe]
#log-error=/var/log/mariadb/mariadb.log
#pid-file=/var/run/mariadb/mariadb.pid
#
10、重置mysql密码(如果 输入出事密码时一直报错请参考下面的解决方案,我第二次安装时 输入初始化密码 报密码不对的错误,所以就在网上又查了解决方案,记录一下供自己和大家一起参考 这是参考博文的地址 https://blog.csdn.net/keepd/article/details/77151006)
执行步骤:
vi /etc/my.cnf
在末尾加上一行代码
skip-grant-tables #跳过密码登录
保存退出
登录mysql
mysql -u root
不要加 -p
修改密码:
use mysql ;
mysql5.7 使用这个语法
update mysql.user set authentication_string=password('123456') where user='root' ;
flush privileges;
重启mysql
systemctl restart mysql
刷新权限:FLUSH PRIVILEGES;
11、测试情况下关闭防火墙
service firewalld stop
线上情况开放3306端口
先登录到mysql
mysql> use mysql;
mysql> update user set host = '%' where user = 'root'; #按实际情况设置
mysql> flush privileges;
上面步骤,解决远程连接时报的 1130 错误
创建数据库 stu 主从测试的时候用
create database stu;
create table stu(id int,age int);
ps:第二次 使用初始化密码登录时出错,解决方案 没有出错 可直接略过:
1,停止mysql服务
systemctl stop mysqld.service
2,修改配置文件无密码登录
vi /etc/my.cnf
在最尾部加上
skip-grant-tables
保存
3,启动mysql
systemctl start mysqld.service
4,登录musql
mysql -u root
此处注意不要加-p
5,修改密码,mysql5.7用此语法
use mysql ;
update mysql.user set authentication_string=password('123456') where user='root' ;
6,回到第二步骤去掉加上的
skip-grant-tables
保存 重启mysql就ok了
#########################################################################
其实默认安装完了mysql后或在日志中生成一个默认的密码 /var/log/mysqld.log 中
拿到默认密码后登录mysql 进行密码重新设置
set password=password('you password');
如果密码级别与默认的级别要求不符时候会报
Your password does not satisfy the current policy requirements
此时需要修改级别与最小的默认密码位数
set global validate_password_policy=0;
set global validate_password_length=4;
然后在进行设置密码就好了
出自:https://blog.csdn.net/keepd/article/details/77151006
ps结束
二、数据库主从复制开始(提前准备两台mysql服务器-->虚拟机):192.168.131.131(slave)和192.168.131.134(master)
1、master上开启binlog日志,配置如下:
vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysqldata
socket=/tmp/mysql.sock
user=mysql
server-id=1
port=3306
server-id=1 #服务器的唯一标识 靠它区分是不同的服务器
log-bin=mysql-bin #打开日志(主机需要打开),这个mysql-bin也可以自定义,这里也可以加上路径
#作为主机的配置
binlog-do-db=stu#要给从机同步的数据库(我自己创建)
binlog-ignore-db=mysql #不给从机同步的库(多个写多行)
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
expire_logs_days=7 #自动清理 7 天前的log文件,可根据需要修改
[root@001 employees_db]# service mysqld restart #重启数据库
# service mysqld restart #重启数据库
测试log_bin是否成功开启
mysql> show variables like '%log_bin%';
2、master的数据库中建立备份账号:backup为用户名,%表示任何远程地址,如下表示密码为123456的任何远程地址的backup都可以连接master主机
mysql> grant replication slave on *.* to 'backup'@'%' identified by '123456';
mysql> use mysql
mysql> select user,authentication_string,host from user;
3、查看master状态
mysql> show master status\G #
有3个重要的地方已经画出来了。查看主服务器上当前的二进制日志名和偏移量值这里的file 和position 要和从上的一致
导出master中的数据,然后导入slave 中
在master主机上:
[root@localhost /]# mysqldump -uroot -p123456 -hlocalhost stu > /opt/stu.bak
mysqldump: [Warning] Using a password on the command line interface can be insecure.
需要安装插件:
yum install openssh-clients -y #(注:slave也需要安装)
讲备份发给slave
[root@localhost /]# scp /opt/stu.bak [email protected]:/opt/
[email protected]'s password:
stu.bak 100% 1811 1.7MB/s 00:00
配置slave:
vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql #mysql路径
datadir=/data/mysqldata #mysql数据目录
socket=/tmp/mysql.sock
user=mysql
server_id=2 #MySQLid 后面2个从服务器需设置不同
port=3306
#加上以下参数可以避免更新不及时,SLAVE 重启后导致的主从复制出错。
read_only = 1
master_info_repository=TABLE
relay_log_info_repository=TABLE
然后将master传过来的备份导入到slave mysql数据库中,slave上的stu数据库不存在则先创建,然后再导入
[root@localhost mysql]# mysql -uroot -p123456 -hlocalhost stu < /opt/stu.bak
[root@localhost mysql]# service mysqld restart
登录slave数据库,并做如下设置
[root@002 ~]# mysql -uroot -p123456
mysql> stop slave;
mysql> change master to
-> master_host='192.168.1.222', #master的ip
-> master_user='backup', #备份用户名
-> master_password='123456', #密码
-> master_log_file='mysql-bin.000004', #上面截图,且要与master的参数一致
-> master_log_pos=154; #上面截图,且要与master的参数一致
mysql> start slave;
#上面截图,且要与master的参数一致
-> master_log_pos=154; #上面截图,且要与master的参数一致
mysql> start slave;
查看slave从机的状态
mysql> show slave status \G
两个yes表示设置成功
关闭掉主数据库的读取锁定,并测试
mysql> unlock tables;
主从两个参数必须一致
测试:
1、主库 在数据库stu中创建一个新的表 从库跟着创建一个相同的表
2、主库 在新建的表中添加数据, 从库新建的表中也会自动添加数据
3、从库关闭 我直接将从库虚拟机关闭 ,主库添加数据,从库重启后,也会自动添加数据
以上实验我已经验证过了,中间遇到好多坑,由于过程被我clear了所以,没有把坑列出来,多百度吧。
我是按着上面的步骤试验成功的。
中间借鉴了两个文章:
https://www.cnblogs.com/imweihao/p/7301537.html
https://www.cnblogs.com/dengshihuang/p/8029092.html
对我帮助很大