CentOS安装mysql 和主从配置、读写分离

一、安装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

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密码

刷新数据库:FLUSH PRIVILEGES;

11、测试情况下关闭防火墙

service firewalld stop

线上情况开放3306端口

先登录到mysql

mysql> use mysql;

mysql> update user set host = '%' where user = 'root'; #按实际情况设置

mysql> flush privileges;

创建数据库 stu  主从测试的时候用

create database stu;

create table stu(id int,age int);

二、数据库主从复制开始(提前准备两台mysql服务器-->虚拟机):192.168.131.131(slave)和192.168.131.134(master)

1master上开启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%';


2master的数据库中建立备份账号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;

查看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

对我帮助很大








猜你喜欢

转载自blog.csdn.net/qq_38553333/article/details/80204617