Linux系统中MySQL数据库主从搭建(步骤详细、零基础教学)

一、在线安装MySQL数据库

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
sudo yum update
sudo yum install mysql-server
sudo systemctl start mysqld

二、离线安装MySQL数据库

一般来说,如果是公司的生产环境,与外网是不连通的,所以建议使用离线安装

1.卸载系统自带的mariadb

rpm -qa|grep mariadb
rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64

2.安装MySQL

提前下载好安装包并放到目录/opt/mysql/中,此处的安装包为:mysql-5.7.19-1.el7.x86_64.rpm-bundle.tar

下载地址:MySQL :: Download MySQL Community Server

cd /opt/mysql/
tar -xvf ./mysql-5.7.19-1.el7.x86_64.rpm-bundle.tar
rpm -ivh mysql-community-common-5.7.19-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.19-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.19-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.19-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.19-1.el7.x86_64.rpm

或着将rpm包放在本地repository仓库下(/var/www/html/cloudera-repos/mysql-5.7)

yum install mysql-community-{server,client,common,libs}-*

三、主从配置

假设在两台机器10.181.110.10和10.181.110.11上搭建MySQL,其中10主机为主节点,11主机为从节点

1.所有节点配置

(1)确保系统重启时,Mysql服务自启动

systemctl enable mysqld

(2)启动Mysql服务

systemctl enable mysqld

(3)修改Mysql密码

    为了增强安全性,MySQL5.7为root用户随机生成了一个密码,如果安装的是RPM包,则默认是在/var/log/mysqld.log中。可通过以下命令获取MySQL的临时密码,并修改密码。

// 获取默认密码
grep "password" /var/log/mysqld.log
// 登录mysql,修改密码
mysql -u root -p
mysql > ALTER USER USER() IDENTIFIED BY 'Mysql.123456';
mysql > grant all privileges on *.* to 'root'@'%' identified by 'Mysql.123456';
mysql > flush privileges;

2.主节点配置

(1)修改/etc/my.cnf文件,并重启服务

[mysqld]
server-id=10     #服务器id (主从必须不一样)
log-bin=/var/lib/mysql/master10-bin   #打开日志(主机需要打开)

binlog-ignore-db=mysql    #不给从机同步的库(多个写多行)
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys

   注意:log-bin等存储路径的配置,其父路径的属主和组必须是是mysql,且一般权限设置为777。

             如果更改了mysql的存储目录,建议参考默认配置的目录,将新目录的属主和权限也做相应更改

(2)创建从节点访问用户(mysql上执行)

CREATE USER 'slave'@'10.181.110.11' IDENTIFIED BY 'slave.8888';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'10.181.110.11';
select user,host from mysql.user;

(3)查看主节点状态(mysql上执行)

systemctl restart mysql    #重启服务
show master status

3.从节点配置

(1)修改/etc/my.cnf文件,并重启服务

server-id=11
relay-log=relay-bin
read-only=1
replicate-ignore-db=mysql               # 不复制的库
replicate-ignore-db=information_schema  
replicate-ignore-db=performance_schema
replicate-ignore-db=sys

(2)从库关联主库(mysql上执行)

CHANGE MASTER TO MASTER_HOST='10.181.110.10',
    ->     MASTER_USER='slave',
    ->     MASTER_PASSWORD='slave.8888',
    ->     MASTER_LOG_FILE='mysql-bin.000001',  #要与master的参数一致 登录主库show marster status查看
    ->     MASTER_LOG_POS=154;   #且要与master的参数一致 登录主库 show marster status 查看

(3)检查状态(mysql上执行)

start slave;
show slave status;

注意:# master_log_file 和 master_log_pos值为主库上面执行show master status得到

              如果 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes,说明配置成功

          # 如果又更改了其他配置,重启服务后导致上面两个参数出现NO,可以重新执行步骤(2)

四、其他配置

1.修改数据库文件、日志文件存储位置等参数

     mysql默认的数据存储在/var/lib/mysql/中,如果系统自带的存储不足,后期可能导致服务崩溃。建议条件允许的情况下,为系统挂载数据盘,并将存储位置更改到挂载盘上目录。本例中的数据盘挂载到/data目录下

(1)关闭MySQL服务

sudo systemctl stop mysqld

(2)配置数据库存储位置

vi /etc/my.cnf
# 日志存储位置 
log-bin=/data/mysqldata/mysql/master10-bin  
# 数据存储位置  
data-dir=/data/mysqldata/mysql     #原先为/var/lib/mysql
socket=
# 错误日志路径
log-error=/data/mysqldata/mysql/mysql-error.log  
# socket路径
socket=/data/mysqldata/mysql/mysql.sock 

注意:有关路径的修改,建议注释掉先前的配置。并且设置属主和组为mysql,权限为777

(3)重启mysql,查看配置是否修改成功

// 登录mysql,查看配置信息
select @@datadir;
// 查看数据库引擎
show variables like '%storage_engine%';
// 查看数据库相关文件位置信息
show variables like '%dir%'

五、可能的错误和解决办法

  1.数据存储位置设置问题

Job for mysqld.service failed because the control process exited with error code

  大多是由于数据库一些存储位置的更改,没有同时设置目录的属主和权限,解决办法

(1)原先已存在的存储目录或文件,通过cp -rp整个拷贝到新目录下,这样会同时拷贝属主和权限

(2)原先没有的目录和文件,可以先创建,然后再通过chown和chmod修改属主和权限

  示例:修改数据存储位置时,原先为/var/lib/mysql路径,其中mysql目录的属主和权限为mysql的读写执行权限 。更改为自定义的路径时,要么通过cp -rp直接将原先mysql目录的复制过来(属主和权限不变)。要么自己创建目录,但是最底层目录的属主和权限要与原先保持一致。

  2.socket文件存储位置问题

[ERROR] Can't start server : Bind on unix socket: Permission denied
[ERROR] Do you already have another mysqld server running on socket: /usr/local/mysql/mysql.sock ?

    解决办法:如果修改了socket路径,需要建立当前路径与原先路径的符号链接     

ln -s /data/mysqldata/mysql/mysql.sock /var/lib/mysql/mysql.sock

2.参考文档

更多配置参考:Linux中MySQL配置文件my.cnf参数优化

                         linux下mysql配置文件my.cnf详解

路径修改参考:Linux 下mysql修改数据库存放目录方法和可能遇到的问题

                         linux下更改MySQL数据库存储路径

                          linux(centos7)修改mysql5.6数据库的数据库存储路径

你可能感兴趣的:(数据库修炼,Mysql搭建,MySQL主从,Linux,Mysql,主从,Mysql数据存储路径修改)