国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MYSQL5.7.22 源碼安裝 主從創建

2024-07-24 12:35:17
字體:
來源:轉載
供稿:網友
  操作系統版本
 
  CENTOS7.6
 
  MYSQL5.7.22
 
  啥?為啥我的操作系統木有iso的安裝鏡像,哎算了,不能弄本地yum源,那就弄個網絡的吧。只不過默認的用不了,那就自己動手豐衣足食
 
  cd /etc/yum.repos.d/
 
  mkdir bak
 
  cp *.repo  bak/
 
  # wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
 
  -bash: wget: 未找到命令
 
  WTF?原來是
 
  原本的CentOS-Base.repo已被刪除,所以沒辦法安裝wget命令,所以用curl -O來獲取
 
  #curl -O  http://mirrors.163.com/.help/CentOS7-Base-163.repo
 
  vi CentOS7-Base-163.repo
 
  替換一些東西,不然可能無法使用
 
  :%s#$releasever#7#g
 
  yum list
 
  OK!YUM源搞定了,下面開始搭建MYSQL
 
  一、MYSQL源碼安裝
  (兩個節點都安裝,步驟一樣的)
 
  安裝環境:
  操作系統CENTOS7.6
 
  NODE1 主機名 tsdb1      IP地址 192.168.159.4
 
  NODE2 主機名 tsdb2       IP地址 192.168.159.5
 
  1、安裝依賴
  yum -y install make gcc-c++ cmake bison-devel  ncurses-devel perl
  2、創建用戶和組  
  groupadd mysql
  useradd mysql -g mysql -M -s /sbin/nologin
  3、下載5.7.22源碼包
  https://downloads.mysql.com/archives/get/file/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
 
  4、解壓tar -zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
 
  cd /opt/
 
  tar -zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz -C  /home/
 
  cd /home/
 
  mv mysql-5.7.22-linux-glibc2.12-x86_64 mysql5.7.22
 
  5、安裝
 
  mkdir -p /home/mysql5.7.22/data/
 
  cd /home/
 
  ln -s mysql5.7.22 mysql
 
  cd mysql
 
  chown -R mysql:mysql ./
  
  ./bin/mysqld --initialize --user=mysql --basedir=/home/mysql5.7.22/ --datadir=/home/mysql5.7.22/data/ --lc_messages_dir=/home/mysql5.7.22/share --lc_messages=en_US
 
  ./bin/mysqld --initialize --user=mysql --basedir=/home/mysql5.7.22/ --datadir=/home/mysql5.7.22/data/ --lc_messages_dir=/home/mysql5.7.22/share --lc_messages=en_US
 
  2019-05-25T13:01:50.716538Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
 
  2019-05-25T13:01:51.897953Z 0 [Warning] InnoDB: New log files created, LSN=45790
 
  2019-05-25T13:01:52.039050Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
 
  2019-05-25T13:01:52.116959Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 43c9f84c-7eed-11e9-a241-fefcfe4975bb.
 
  2019-05-25T13:01:52.118956Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
 
  2019-05-25T13:01:52.119626Z 1 [Note] A temporary password is generated for root@localhost: kar)*.OtV4F)
 
  安裝速度賊快,刷~~~的一下就完事了。
 
  kar)*.OtV4F)
 
  這個是自動生成的臨時密碼
 
  (如果看到有報這個錯的直接安裝就好)
  bin/mysqld: error while loading shared libraries:  libaio.so.1: cannot open shared object file: No such file or directory
 
  解決方法: yum install -y libaio   //安裝后再去初始化就OK了)
 
  #將mysql/目錄下除了data/目錄的所有文件,改回root用戶所有
  chown -R root .
  #mysql用戶只需作為mysql-5.7.22/data/目錄下所有文件的所有者
  chown -R mysql data
 
  5.復制啟動文件
 
  cd /home/mysql/
 
  cp ./support-files/mysql.server /etc/init.d/mysqld
 
  chmod 755 /etc/init.d/mysqld
 
  cp ./bin/my_print_defaults /usr/bin/
 
  6.修改啟動腳本
 
  vi /etc/init.d/mysqld
  #修改項:
  basedir= /home/mysql5.7.22/
 
  datadir= /home/mysql5.7.22/data/
  port=3306
 
  #加入環境變量,編輯 /etc/profile,這樣可以在任何地方用mysql命令了
  vi /etc/profile
  #添加mysql路徑,加入下面內容,按ESC-->:wq保存
  export PATH=$PATH:/home/mysql5.7.22/bin
 
  source /etc/profile
 
  7.修改mysql配置項
 
  vi /etc/my.cnf
 
  [mysqld]
  basedir =  /home/mysql5.7.22
 
  datadir =  /home/mysql5.7.22/data
 
   8.啟動mysql
 
  service mysqld start
 
  有遇到無法啟動的情況,第一是將配置文件修改成上面簡單的方式,第二是刪除data目錄下的文件,重新初始化。
 
  mysql -uroot -pkar)*.OtV4F)
 
  遇到無法啟動報錯的情況,例如:
 
  2019-12-31T07:49:42.258557Z 0 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
 
  2019-12-31T07:49:42.259636Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
 
  2019-12-31T07:49:42.259803Z 0 [Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key
 
  2019-12-31T07:49:42.260385Z 0 [Note] Server hostname (bind-address): '*'; port: 3306
 
  2019-12-31T07:49:42.260446Z 0 [Note] IPv6 is available.
 
  2019-12-31T07:49:42.260462Z 0 [Note]   - '::' resolves to '::';
 
  2019-12-31T07:49:42.260487Z 0 [Note] Server socket created on IP: '::'.
 
  2019-12-31T07:49:42.261927Z 0 [Note] InnoDB: Loading buffer pool(s) from /data/mysql/mysql/ib_buffer_pool
 
  2019-12-31T07:49:42.262277Z 0 [Note] InnoDB: Buffer pool(s) load completed at 191231 15:49:42
 
  2019-12-31T07:49:42.264556Z 0 [Warning] Failed to open optimizer cost constant tables
 
  2019-12-31T07:49:42.264839Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
 
  2019-12-31T07:49:42.264937Z 0 [ERROR] Aborting
 
  (遇到這個報錯問題,有可能是因為安裝目錄設置不對導致的,我試過自己重新安裝
 
  一個測試庫,然后沒有按筆記上的目錄設置,自己設置了新的不同的目錄如下,
 
  [mysqld]
 
  basedir=/data/mysql/
 
  datadir=/data/mysql/data/
 
  [mysqld_safe]
 
  log-error=/var/log/mysqld.log
 
  然后重新安裝的時候也重新設置下,如下:
 
  ./bin/mysqld --initialize --user=mysql --basedir=/data/mysql/ --datadir=/data/mysql/data/ --lc_messages_dir=/data/mysql-5.7.22-linux-glibc2.12-x86_64/share/ --lc_messages=en_US
 
  然后安裝目錄的用戶所屬也要記得修改為mysql)
 
  登陸后第一件事是先修改密碼,否則敲啥命令都報錯,老老實實改密碼
 
  進入mysql修改初始密碼,修改遠程連接的用戶權限問題
 
  alter user 'root'@'localhost' identified by 'TaB)*.Wtf4F)';   
  flush privileges;    #刷新權限
 
  mysql -uroot -pTaB)*.Wtf4F)
 
  use mysql;
 
  update user set host = '%' where user ='root';
 
  flush privileges;
 
  CENTOS7.6版本開機不會自啟動,需修改權限
  chmod +x /etc/rc.d/rc.local
 
  主從搭建
 
  主庫配置
 
  vi /etc/my.cnf
 
  [mysqld]
 
  basedir=/home/mysql5.7.22/
 
  datadir=/home/mysql5.7.22/data/
 
  max_connections=3000
 
  default-storage-engine=INNODB
 
  character-set-server=utf8
 
  slow_query_log_file = /home/mysql5.7.22/log/mysql-slow.log
 
  slow_query_log=1
 
  long_query_time = 5
 
  log-queries-not-using-indexes = 1
 
  bind-address=0.0.0.0
 
  socket=/tmp/mysql.sock
 
  user=mysql
 
  #master
 
  server-id=1
 
  log-bin=mysql-bin
 
  log-bin-index=mysql-bin.index
 
  log-slave-updates=1
 
  binlog-do-db=Master-slave
 
  binlog-ignore-db=mysql
 
  binlog_format=mixed
 
  expire_logs_days=7
 
  重啟
 
  service mysqld restart
 
  主庫配置同步用戶
 
  grant replication slave on *.* to 'Master-slave'@'192.168.159.5' identified by 'TaB)*.Wtf4F)';
 
  flush privileges;
 
  mysql> show master status;
 
  +------------------+----------+--------------+------------------+-------------------+
 
  | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
 
  +------------------+----------+--------------+------------------+-------------------+
 
  | mysql-bin.000002 |      601 | Master-slave | mysql            |                   |
 
  +------------------+----------+--------------+------------------+-------------------+
 
  1 row in set (0.00 sec)
 
  從庫配置
 
  vi /etc/my.cnf
 
  [mysqld]
 
  basedir = /home/mysql5.7.22
 
  datadir = /home/mysql5.7.22/data
 
  max_connections=3000
 
  default-storage-engine=INNODB
 
  character-set-server=utf8
 
  slow_query_log_file = /home/mysql5.7.22/log/mysql-slow.log
 
  slow_query_log=1
 
  long_query_time = 5
 
  log-queries-not-using-indexes = 1
 
  bind-address=0.0.0.0
 
  socket=/tmp/mysql.sock
 
  user=mysql
 
  #slave
 
  server-id=2
 
  log-bin= mysql-bin
 
  relay-log= mysql-relay-bin
 
  read->
 
  log-slave-updates=1
 
  replicate-do-db=Master-slave
 
  expire_logs_days=7
 
  重啟
 
  service mysqld restart
 
  在主庫查詢ID號和日志文件號
 
  show master status;
 
  再登陸從庫
 
  從庫
 
  mysql> CHANGE MASTER TO MASTER_HOST='192.168.159.4',MASTER_USER='Master-slave',MASTER_PASSWORD='TaB)*.Wtf4F)',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=601,MASTER_CONNECT_RETRY=10;
 
  start slave;
 
  查看
 
  show slave status /G
 
  這里有些地方還有疑惑,比如我在配置文件增加以下信息會無法啟動數據庫
 
  [mysqld_safe]
 
  log-error=/home/mysql5.7.22/log/tsdb1_error.log
 
  pid-file=/home/mysql5.7.22/data/tsdb1.pid
 
  啟動會遇到報錯
 
  service mysqld start
 
  Starting MySQL. ERROR! The server quit without updating PID file (/home/mysql5.7.22/data//tsdb1.pid).
 
  一直查資料無法解決
 
  以上都是我根據各種網上資料加上自己遇到的問題,總結修改后的,只作為寫給自己的筆記,方便下次搭建的時候查看,只不過那個設置只給自己看的功能不見了。
 
  注意一個問題,在生產環境,要注意時區問題
 
  [mysqld]
 
  default-time_zone = '+8:00'
 
  使用北京時間的時區
 
  error 1045密碼錯誤
 
  select * from mysql.user where user='root';
 
  use mysql;
 
  update user set authentication_string=password('123456') where user='root' and host='localhost';
 
  update user set authentication_string=password('123456') where user='root' and host='%';
 
  flush privileges;
 
  error 1086密碼過期
 
  use mysql;
 
  update user set password_expired="N" where user="root";
 
  flush privileges;
 
  主從切換
 
  mysql主從關系中,如果master宕機了,則要提升slave為主,
 
      等原來的主庫恢復之后,則要把老的主庫變為從庫,
 
      這樣才能盡最大可能的保證應用層面的業務高可用性和數據的完整性。
 
  ## mysql主從切換為從主:
 
  從庫變主庫
 
  將要由現在的從庫切換為主庫:
 
  show processlist;#  確保Slave has read all relay log;
 
  STOP SLAVE IO_THREAD
 
  show slave status /G;檢查IO及SQL線程是否正常,如果為NO表明同步不一致
 
  stop slave;
 
  reset master;
 
  reset slave all;(看版本號)
 
  grant replication slave on *.* repl@'IP' identified by '密碼';
 
  show master status;#記住這里列出的log_file和log_pos信息
 
  ------------------------------------------------------------------------------
 
  ## 主庫變從庫
 
  將要由現在的主庫切換成從庫
 
  Reset master;(新的slave,老的master)
 
  Reset slave;
 
  change master to master_host="IP",
 
  master_port=3306,
 
  master_user="repl",
 
  master_password="密碼",
 
  master_log_file="...",#上一步中列出的log_file
 
  master_log_pos="...";#上一部中列出的log_pos
 
  start slave;
 
  show slave status/G;
 
  目前只是基礎搭建,還有很多優化的參數沒有驗證測試,后續再補上
 
  補充一下:
 
  MYSQL還有一個和性能有關的關鍵參數,生產環境遇到的一個性能問題
 
  innodb_flush_log_at_trx_commit
 
  該參數控制重做日志寫入磁盤的過程。我們知道 InnoDB 使用“Write Ahead Log”策略來避免數據丟失問題,即依靠重做日志來保證數據能在丟失后進行恢復。因此,InnoDB 重做日志的持久化非常重要。
 
  該參數的有效值有 0、1、2:
 
  0:事務提交時,不將重做日志緩沖寫入磁盤,而是依靠 InnoDB 的主線程每秒執行一次刷新到磁盤。因此如果 MySQL 發生宕機,那么就有可能丟失一部分事務。
 
  1:事務提交時,會將重做日志緩沖寫入磁盤,并且立即刷新(fsync())。注意,因為操作系統的“延遲寫”特性,此時的刷入只是寫到了操作系統的緩沖區中,因此執行同步操作才能保證一定持久化到了硬盤中。
 
  2:事務提交時,會將重做日志緩沖寫入磁盤,但是不會立即進行刷新操作,因此只是寫到了操作系統的緩沖區。此時若操作系統發生宕機而沒有即使的同步,也可能會丟失一部分數據。
 
  可以看到,只有1才能真正地保證事務的持久性,但是由于刷新操作 fsync() 是阻塞的,直到完成后才返回,我們知道寫磁盤的速度是很慢的,因此 MySQL 的性能會明顯地下降。如果不在乎事務丟失,,0和2能獲得更高的性能。
 
  sync_binlog
 
  該參數控制著二進制日志寫入磁盤的過程。
 
  該參數的有效值為0 、1、N:
 
  0:默認值。事務提交后,將二進制日志從緩沖寫入磁盤,但是不進行刷新操作(fsync()),此時只是寫入了操作系統緩沖,若操作系統宕機則會丟失部分二進制日志。
 
  1:事務提交后,將二進制文件寫入磁盤并立即執行刷新操作,相當于是同步寫入磁盤,不經過操作系統的緩存。
 
  N:每寫N次操作系統緩沖就執行一次刷新操作。
 
  二進制日志文件涉及到數據的恢復,以及想在主從之間獲得最大的一致性,那么應該將該參數設置為1,但同時也會造成一定的性能損耗。
 
  通常,會將這兩個參數都設置成1來保證數據的安全,但是如果在某些情況下性能更重要,那么可以考慮將其設為其他值來獲得最大的性能。
 
  設置為1,最安全,但是有較大的性能損失;
 
  設置為0,效率最高,但是最不安全;
 
  設置為2,只要操作系統不崩潰,數據不會丟失;
 
  一般有主從架構可設置為(主主架構也可以,或者對數據安全要求不高),這樣設置的好處是提高IO性能,面對大并發也有一定的性能提升
 
  innodb_flush_log_at_trx_commit=2
 
  sync_binlog=0

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东乡| 秭归县| 甘孜| 巍山| 遂川县| 鄂伦春自治旗| 同仁县| 定日县| 龙江县| 双桥区| 申扎县| 阿坝| 望都县| 佛教| 鹿泉市| 新宁县| 乐至县| 竹山县| 山西省| 平利县| 龙岩市| 迁西县| 左权县| 鲁甸县| 右玉县| 石景山区| 聊城市| 麦盖提县| 石楼县| 青铜峡市| 灵寿县| 台南县| 武功县| 陆良县| 昂仁县| 襄垣县| 新巴尔虎右旗| 呈贡县| 武川县| 二连浩特市| 云浮市|