mysql8.0安装配置、主从复制配置详解

mysql8.0 linux 安装
1.下载
mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz

2.解压
tar -xvf mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz
mv mysql-8.0.18-linux-glibc2.12-x86_64 mysql
mv mysql /usr/local
cd /usr/local/mysql
mkdir data

3.编辑 my.cnf
vi /etc/my.cnf
文件内容为:
复制代码
[client]
port=3306
socket=/tmp/mysql/mysql.sock

[mysqld]
port=3306
user=mysql
log-bin=mysql-bin
server-id=1
socket=/tmp/mysql/mysql.sock
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
log-error=error.log
default_authentication_plugin=mysql_native_password

transaction_isolation = READ-COMMITTED
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
lower_case_table_names = 1

#skip-grant-tables

4.创建用户
groupadd mysql
useradd -g mysql mysql

5.更改目录权限
chown -R mysql:mysql /tmp/mysql
chown -R mysql:mysql /usr/local/mysql
chmod -R 755 /tmp/mysql /usr/local/mysql

  1. 初始化
    cd /usr/local/mysql

./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/

7.初始化密码
初始化时并没有出现 初始密码,因此需要修改密码。
注释 skip-grant-tables,可以使用无密码登录
启动 mysql
./support-files/mysql.server start
(1).配置mysql的服务,将support-files下的mysql.server 复制到 /etc/init.d/下并取名mysql(如果、etc/init.d/ 下面没有启动服务使用下面命令复制启动项或使用软链接)
$> cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
创建mysql软链接至/usr/bin下
ln -s /usr/local/mysql/bin/mysql /usr/bin

(2).清空密码
use mysql;
update user set authentication_string=’’ where user=‘root’;
(3).无密码登录
mysql -u root -p
输入密码是直接回车。
ALTER user ‘root’@‘localhost’ IDENTIFIED BY ‘root’;
这样就修改好密码了。
自此 mysql 就安装好了。

8 设置自动启动
cd support-files/
cp mysql.server /etc/init.d/mysql
chmod 755 /etc/init.d/mysql
cd /etc/init.d
chkconfig --add mysql
chkconfig --level 345 mysql on
mysql restart

9 远程连接
1.在 my.cnf 的mysqld 下增加
default_authentication_plugin=mysql_native_password
2.进入mysql命令行
use mysql
update user set host =’%’ where user=‘root’;
ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘root’;
FLUSH PRIVILEGES;

关闭防火墙
1:查看防火状态
systemctl status firewalld
service iptables status
2:暂时关闭防火墙
systemctl stop firewalld
service iptables stop
3:永久关闭防火墙
systemctl disable firewalld
chkconfig iptables off

主从复制配置
主服务:192.168.137.141
从服务:192.168.137.142
1、主从服务器分别作以下操作:
1.1、版本一致
1.2、初始化表,并在后台启动mysql
1.3、修改root的密码
2、修改主服务器master
#vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id=1 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
3、修改从服务器slave:
#vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[不是必须]启用二进制日志
server-id=2 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
4、重启两台服务器的mysql
/etc/init.d/mysql restart
5、在主服务器上建立帐户并授权slave:
#/usr/local/mysql/bin/mysql -uroot -p123456
#use mysql;
#CREATE USER ‘slave’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
#mysql> GRANT REPLICATION SLAVE ON . TO ‘slave’@’%’;

//一般不用root帐号 '%'表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.137.141,加强安全。
6、登录主服务器的mysql,查询master的状态
mysql>show master status;
±-----------------±---------±-------------±-----------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
±-----------------±---------±-------------±-----------------+
| mysql-bin.000004 | 308 | | |
±-----------------±---------±-------------±-----------------+
1 row in set (0.00 sec)
注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

7、从服务器设置普通用户只读模式
mysql>create user ‘test’@’%’ identified by ‘123456’; // 创建普通用户,可以远程连接
mysql> grant select on . to test@’%‘identified by ‘123456’; //授权所有库,只能查询操作
mysql> grant all privileges on . to test@’%'identified by ‘123456’; //这是授予所有权限

关于mysql创建用户以及权限,下面有详细说明;这里只是做了主从复制避免从库添加数据做准备;
从库远程登录就用刚才设置的普通的只要查询权限的账号去登录,避免导致主从出错
8、配置从服务器Slave:
mysql>change master to master_host=‘192.168.137.141’,master_user=‘slave’,master_password=‘q123456’, master_log_file=‘mysql-bin.000004’,master_log_pos=308; //注意不要断开,308数字前后无单引号。

Mysql>start slave; //启动从服务器复制功能
change master to master_host=‘192.168.137.141’,master_user=‘slave’,master_password=‘123456’,master_log_file=‘mysql-bin.000004’,master_log_pos=308;
9、检查从服务器复制功能状态:
mysql> show slave status\G
*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.137.141 //主服务器地址
Master_User: slave  //授权帐户名,尽量避免使用root
Master_Port: 3306    //数据库端口,部分版本没有此行
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 308     //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
Relay_Log_File: ddte-relay-bin.000003
Relay_Log_Pos: 308
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes    //此状态必须YES
Slave_SQL_Running: Yes     //此状态必须YES
......

注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

以上操作过程,主从服务器配置完成。

12、完成:
编写一shell脚本,用nagios监控slave的两个yes(Slave_IO及Slave_SQL进程),如发现只有一个或零个yes,就表明主从有问题了,发短信警报吧。

报错记录:
1.
mysql> start slave;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
报错原因:
从库已经存在之前的relay log
解决方法:
使用RESET SLAVE语句,清除master信息和relay日志的信息,删除所有的relay日志文件,并开始创建一个全新的中继日志
mysql> stop slave;
mysql> reset slave;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值