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

或者是:

[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%';

 

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;#上面截圖,且要與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

對我幫助很大

 

 

 

 

 

 

 

發佈了36 篇原創文章 · 獲贊 15 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章