ShellScript로 원격DB 백업 및 로컬DB 복원 하기

Linux
#!/bin/bash LOCALDB={로컬DB명} REMOTEDB={원격DB명} LOCALDBFILE=/home/databaseBackup/sqlFile/$LOCALDB.sql echo "Backup:: $REMOTEDB > $LOCALDB" /usr/bin/mysqldump -h{원격DB서버주소} -P {원격DB서버포트} -u {원격DB사용자} -p"{원격DB사용자비밀번호}" --add-drop-table $REMOTEDB > $LOCALDBFILE LOCALDBFILESIZE=$(wc -c "$LOCALDBFILE" | awk '{print $1}') echo "FileSize: $LOCALDBFILESIZE" #파일이 일정 용량 있상일경우에만 복원을 시도 if [ $LOCALDBFILESIZE -gt 3000 ];then # 원격서버의 Root권한이 %인것을 로컬에서는 localhost로 문자 치환 echo "Strng replace:: $LOCALDBFILE >> $LOCALDBFILE.bk" /usr/bin/cat $LOCALDBFILE | sed 's/DEFINER=`root`@`%`/DEFINER=`root`@`localhost`/g' > $LOCALDBFILE.bk # 문자치환된 파일을 덮어써서 1개로 만듬 echo "File Move:: $LOCALDBFILE.bk >> $LOCALDBFILE" /usr/bin/mv -f $LOCALDBFILE.bk $LOCALDBFILE # 문자치환된 파일 삭제처리 echo "Tmpfile Remove $LOCALDBFILE.bk" /usr/bin/rm -rf $LOCALDBFILE.bk # 로컬 DB에 파일 복구 echo "Restore:: $LOCALDB < $LOCALDBFILE" /usr/bin/mysql -u{로컬DB사용자} -p"{로컬DB사용자비밀번호}" $LOCALDB < $LOCALDBFILE fi
Read More

Windows10 OneDrive 삭제

Windows
OneDrive를 삭제 하게 될경우에는 기본에 동기화 된게 있으면은 동기화를 해제하고 작업을 해야 합니다. 동기화가 이뤄지는 도중에 작업하면은 동기화 항목중에 바탕화면이나 다른것이 있다면은 함께 지워지게 됩으로 꼭 동기화를 해제하고 삭제 처리 해주시기 바랍니다. @echo off cls set x86="%SYSTEMROOT%\System32\OneDriveSetup.exe" set x64="%SYSTEMROOT%\SysWOW64\OneDriveSetup.exe" echo Closing the OneDrive process. echo. taskkill /f /im OneDrive.exe > NUL 2>&1 ping 127.0.0.1 -n 5 > NUL 2>&1 echo Uninstalling OneDrive... echo. if exist %x64% ( %x64% /uninstall ) else ( %x86% /uninstall ) ping 127.0.0.1 -n 5 > NUL 2>&1 echo Removing OneDrive leftovers... echo. rd "%USERPROFILE%\OneDrive" /Q /S > NUL 2>&1 rd "C:\OneDriveTemp" /Q /S > NUL 2>&1 rd "%LOCALAPPDATA%\Microsoft\OneDrive" /Q /S > NUL 2>&1 rd "%PROGRAMDATA%\Microsoft OneDrive" /Q /S > NUL 2>&1 echo Removing OneDrive from the Windows Explorer Side Panel... echo. REG DELETE "HKEY_CLASSES_ROOT\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}" /f…
Read More

WebView 기능을 이용한 앱 개발중

Android
오랜만에 기술적인 내용이 아닌 일반적인 내용을 작성을 하게 되었습니다. 이번에 새롭게 공부를 시작하면서 Web과 App을 이용한 하이브리드(?) 용으로 App을 개발하게 되었습니다. 아직 시작 단계이지만 순항을 하는중이라고 생각을 합니다. 현재는 안드로이드의 기능중 WebView를 이용해서 순서 Web에 대한 표시를 하고, 웹에 포함된 기능중 일부에 대해서는 App과 사용작용으로 작동하는 기능을 개발중에 있습니다. 해당 기능이 되면은 말 그대로 하이브리드 형식이되지 않을까 싶습니다. 순수하게 웹으로만 작동하는것도 아니고, App만으로도 작동하지 않지만 서로가 상호 보완을 통해서 기능이 작동을 하리라고 생각이 됩니다. 아직 내용을 정리하기에는 부족하고 정리가 미흡하지만 조만간 해당 내용에 대해서 글을 작성하지 않을까 싶습니다. 카테고리를 만들고 나서 예고 차원에서 일단 기술적인 내용이 없는 글을 먼저 작성을 해서 신규 카테고리가 있다는것도 알리고 카테고리의 글을 하나씩 채워 나갈 생각 입니다. 잘하시는 분들이 볼 경우에는 많이 미흡할 수 있지만 이런 내용이 있다는 정도로 제가 정리해서 남기기 위한 글입니다. 이번에…
Read More

PEM 파일을 PPK 파일로 변환후 안될때

Linux
pem 파일을 가지고 ppk 로 변환을 하였는데, 정상적인디 안될때 ppk file의 버전을 3 에서 2로 변경을 하니 정상적으로 ppk 파일을 이용할 수 있었습니다. 정확한 이유는 버전 차이라고 생각이 됩니다. 가끔 PPK파일이 필요하기때문에 미리 미리 만들어서 테스트를 해두면은 나중에 급할때 사용하기에 편리할수 있다는 생각을 합니다. 물론 Key파일에 대해서는 관리를 잘해서 보관을 해야지 유출되면은 바로 접속 권한을 모두 주기 때문에 적절히 잘 관리하여서 처리를 해야 합니다.
Read More

개인 소스 관리를 시작 하였습니다.

프로그램
회사에서는 이미 Gitlab를 통해서 개발코드에 대한 형상관리를 하고 있습니다. 하지만 개인적으로는 그다지 필요가 없다고 생각을 해서 하지 않던것을 이번에 모두 정리해서 등록하는데 꽤 시간을 할애해서 작업을 진행하였습니다. 그래도 개인적으로 연습삼아 한 일에 대해서는 모두 올리려고 하니 너무 많아서 조금 간추리는 작업을 해서 어느정도 남에게 공개한 프로그램들에 한해서만 하는것도 꽤 시간이 걸리는 작업을 하게 되었습니다. 그래도 이제 개인적인 저장소에서 FTP를 통해서 소스 관리하던것을 올리고 나서 보니 여러가지 일을 하였고, 여러가시 소소한것이 많다는 생각을 하였습니다. 시작하고 마무리 하지 않은 일도 계획만 잡아 두거나 혹은 다른 사람의 코드를 연구하기 위해서 만들어 놓은것들이 한둘이 아니라서 정리가 꽤 애를 먹었습니다. 그래도 큰맘 먹고 정리를 하니 디렉토리도 정리가 되고 한결 찾기가 수월해져서 좋은듯 합니다. 그동안에 소스 형상관리를 어느곳에 이용할까 혹은 개인 서버를 만들까 하면서 고민을 많이 하였습니다. 솔직히 오픈소스로 공개할 정도가 되지 않으니 github를 이용하기도 조금…
Read More

기록물

Database
MES 개념도 그냥 관계도를 그려본것입니다. 상세한 자료는 솔직히 인터넷에 공개를 할 수 없어서 이렇게 구분을 해야 하지 않을까 하는 형태로 그려본 것입니다. MES 개발이라는것을 처음해보는것이라서 준비과정이 상당히 많고 어딘가에 참조를 해서 개발을 한다는것이 조금은 시간이 걸리는것 같습니다. 각자 고유의 기능을 포함하고 DATA를 관리하는 방법을 보여주지 않으려고 해서 화면만으로 보고 기능을 개발하는것은 상당히 고역입니다. 하지만 한번에 성공한다고 하기 보다는 실제 DATA를 입력을 하고 진행을 하다 보면은 조금씩 보완이 되고 업데이트가 되면서 조금씩 완성형에 다가가지 않을까 하는 생각을 하게 되기에 초기 자료로서 기록을 남겨 둡니다.
Read More

SVN으로 배포후 기본 세팅하기

Linux
여러 NAS 서버에 배포를 해줄때 초기에 실행할 파일입니다. 예전에는 APM세팅을 해주고 잘아는 사람이 세팅을 해주는것이 일반적인 Server라면은 NAS에서는 기본적인 패키지 설치도 쉽고 해서 회사 내부에서 전혀 모르는 사람이 메뉴얼에 따라서 초기 세팅을 해서 배포하는 경우도 있습니다. 그렇게 작업을 하다 보니 꼭 한번은 체크를 해야 되어서 필수적으로 세팅하고 해야되는 작업을 그냥 파일로 만들어 보았습니다. 어차피 모든 소스는 범용적으로 소스저장소에 올려 놓기때문에 초기에 파일 몇개만 순서적으로 실행을 하면은 모든 사람이 할 수 있어서 이런 방법을 취하게 되었습니다. #!/bin/bash # SVN SETTING /usr/bin/svn propset svn:ignore application/libs/databases.php . # DEFAULT DIRTORY MAKE targetDataBase=`pwd -P` if [ -d $targetDataBase/uploads ]; then echo 'Not Make' else /bin/mkdir $targetDataBase/uploads fi if [ -d $targetDataBase/uploads/logs ]; then echo 'Not Make' else /bin/mkdir $targetDataBase/uploads/logs fi /bin/chmod 777 $targetDataBase/uploads /bin/chmod 777 $targetDataBase/uploads/logs 이렇게 파일을 만들어 놓고 보면은 이제 누구나 할…
Read More

CRON 을 ShellScript로 처리하기

Linux, NAS
서버를 운영하다보면 여러가지 스케쥴러 작업을 실행할 일이 생깁니다. 내가 서버 관리자 이면은 그냥 귀찮음을 감수 하고 매번 등록을 하는것도 나쁘지 않지만 매번 찾아가서 맞추기는 솔직히 귀찮음이 발동을 해서 CRONTAB은 한개의 파일만 보고 실행을 할려고 만들었습니다. #!/bin/bash # 시스템 분 정보 NOW=$(date +"%M") echo $NOW # CRON 단일 파일로 처리 하기 위해서 분 단위 구분 let FULL=$NOW%60 let HALF=$NOW%30 let TEN=$NOW%10 # CRON 조건문 추가 if [ $FULL -eq 0 ]; then echo 'FULL' /volume1/@appstore/PHP7.4/usr/local/bin/php74 -q /volume2/publicedition/skem/index.php system cron dumy_noti elif [ $HALF -eq 0 ]; then echo 'HALF' elif [ $TEN -eq 0 ]; then echo 'TEN' else echo 'ONE' /volume1/@appstore/PHP7.4/usr/local/bin/php74 -q /volume2/publicedition/skem/index.php system lot lot_check fi 물론 단일 파일이라서 CRONTAB하고는 작동 방법이 조금 다르지만 언제나 내 좋을대로만 움직일수 없기에 가장 협의를 본 방법입니다. 이 방법외에도 많지만 관리자에게 말을 하지…
Read More

[CSharp] Zip 파일 압축, 해제

CSharp
참조할 어셈블리System.IO.CompressionSystem.IO.Compression.FileSystem // 압축 풀기 using (ZipArchive zipArchive = ZipFile.OpenRead(LOCAL_FILE)) { foreach (ZipArchiveEntry zipArchiveEntry in zipArchive.Entries) { try { string folderPath = Path.GetDirectoryName(Path.Combine(LOCAL_ZIPARCHIVE_PATH, zipArchiveEntry.FullName)); // if (!Directory.Exists(LOCAL_ZIPARCHIVE_PATH)) { Directory.CreateDirectory(LOCAL_ZIPARCHIVE_PATH); } // zipArchiveEntry.ExtractToFile(Path.Combine(LOCAL_ZIPARCHIVE_PATH, zipArchiveEntry.FullName), true); } catch (PathTooLongException pt_ex) { Console.WriteLine(pt_ex); } } } // 압축하기 using (FileStream fileStream = new FileStream(SFTP_DOWNLOAD_LOCAL_PATH, FileMode.Create, FileAccess.ReadWrite)) { using (ZipArchive zipArchive = new ZipArchive(fileStream, ZipArchiveMode.Update)) { try { foreach (string filePath in Directory.EnumerateFiles(DOWNLOAD_LOCAL_ZIPARCHIVE_PATH, "*.*", SearchOption.AllDirectories)) { string relativePath = filePath.Substring(DOWNLOAD_LOCAL_ZIPARCHIVE_PATH.Length + 1); try { zipArchive.CreateEntryFromFile(filePath, relativePath); } catch (PathTooLongException pt_ex) { Console.WriteLine(pt_ex); } } } catch (Exception ex) { Console.WriteLine(ex); } finally { zipArchive.Dispose(); fileStream.Close(); } } } 단순하게 참조만 추가하니 정상적으로 되지 않아서 참조 방법을 조금더 자세히 기록을 합니다. 변경일 : 2021.06.19
Read More

[CSharp] SFTP

CSharp
ConnectionInfo ci = new ConnectionInfo(SFTP_HOST, SFTP_PORT, SFTP_USER, new PasswordAuthenticationMethod(SFTP_USER, SFTP_PASS)); using (var sftpClient = new SftpClient(ci)) { try { // sftpClient.KeepAliveInterval = TimeSpan.FromSeconds(60); sftpClient.ConnectionInfo.Timeout = TimeSpan.FromMinutes(180); sftpClient.OperationTimeout = TimeSpan.FromMinutes(180); sftpClient.Connect(); sftpClient.DeleteFile(SFTP_PATH); sftpClient.Disconnect(); // sftpClient.Connect(); sftpClient.BufferSize = 4 * 1024; using (FileStream fs = new FileStream(LOCAL_FILE, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { sftpClient.BufferSize = 4 * 1024; sftpClient.UploadFile(fs, FILE_NAME, true); } sftpClient.Disconnect(); // sftpClient.Connect(); sftpClient.DownloadFile(SFTP_DOWNLOAD_SERVER_PATH, LOCAL_FILE); sftpClient.Disconnect(); } catch (System.Net.Sockets.SocketException socket_ex) { MessageBox.Show(socket_ex.Message, "경고"); } catch (Renci.SshNet.Common.SshAuthenticationException ssh_ex) { MessageBox.Show(ssh_ex.Message, "경고"); } }
Read More

[CSharp] MySQL 접속 처리

CSharp, Database
using (dbConnection = new MySqlConnection("Server={0}Port={1};Database={2};Uid={3};Pwd={4}")) { try { /* INSERT, UPDATE 처리 */ dbConnection.Open(); dbQuery = string.Format("UPDATE `table` SET colume = '{0}' WHERE idx = '{1}'", VALUE, IDX); dbConnection.Open(); dbCmd = new MySqlCommand(dbQuery, dbConnection); dbCmd.ExecuteNonQuery(); dbConnection.Close(); /* bind 형식 */ dbConnection.Open(); dbQuery = "INSERT INTO log (`content`,`ip`,`creator`) VALUES (@content,@ip,@creator); "; dbCmd = new MySqlCommand(dbQuery, dbConnection); var bind1 = new MySqlParameter("@content", this.logString() + TEXT +"했습니다."); dbCmd.Parameters.Add(bind1); if( dbCmd.ExecuteNonQuery() == 1) { //성공 } dbConnection.Close(); /* SELECT */ dbConnection.Open(); dbQuery = string.Format("SELECT * FROM `table` WHERE idx = '{0}'; ", IDX); dbCmd = new MySqlCommand(dbQuery, dbConnection); dbTable = dbCmd.ExecuteReader(); if (dbTable.HasRows) { while (dbTable.Read()) { dbTable["cnt"].ToString().Trim(); } } } catch (MySqlException db_ex) { MessageBox.Show(db_ex.Message, "경고"); } finally { } } 그냥 소스코드의 일부 기능을 정리한 코드 입니다. 누군가가 바로 사용할 정도의 코드가…
Read More

[CSharp] datagirdivew 설정

CSharp
C#으로 개발을 하다 보면은 datagridview를 사용할 일이 너무 많아서 한번 기록을 해두기 위해서 글을 작성합니다. System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; dataGridViewCellStyle1.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(165))); dataGridViewCellStyle1.Padding = new System.Windows.Forms.Padding(0, 5, 0, 5); dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; //줄바꿈 this.dataGridViewFileList.Columns.Clear(); this.dataGridViewFileList.Rows.Clear(); this.dataGridViewFileList.Refresh(); this.dataGridViewFileList.BorderStyle = BorderStyle.None; this.dataGridViewFileList.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.None; this.dataGridViewFileList.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.None; this.dataGridViewFileList.CellBorderStyle = DataGridViewCellBorderStyle.SingleHorizontal; this.dataGridViewFileList.BackgroundColor = Color.White; this.dataGridViewFileList.DefaultCellStyle.SelectionBackColor = Color.FromArgb(0, 161, 218);//선택시 this.dataGridViewFileList.DefaultCellStyle.SelectionForeColor = Color.White; //선택시 this.dataGridViewFileList.AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue;//Color.FromArgb(236, 240, 241); this.dataGridViewFileList.ColumnHeadersDefaultCellStyle.BackColor = Color.FromArgb(228, 170, 102); this.dataGridViewFileList.ColumnHeadersDefaultCellStyle.ForeColor = Color.White; this.dataGridViewFileList.SelectionMode = DataGridViewSelectionMode.FullRowSelect; this.dataGridViewFileList.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None; this.dataGridViewFileList.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None; this.dataGridViewFileList.DefaultCellStyle.WrapMode = DataGridViewTriState.True; //줄바꿈 this.dataGridViewFileList.Font = new System.Drawing.Font("맑은 고딕", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(165))); this.dataGridViewFileList.Visible = true; this.dataGridViewFileList.ReadOnly = true; this.dataGridViewFileList.MultiSelect = false; this.dataGridViewFileList.AutoGenerateColumns = false; this.dataGridViewFileList.RowHeadersVisible = false; this.dataGridViewFileList.ShowCellErrors = false; this.dataGridViewFileList.ShowCellToolTips = false; this.dataGridViewFileList.ShowEditingIcon = false; this.dataGridViewFileList.ShowRowErrors…
Read More

ACTS 5.23

ACTS/SFCA
■ 프로그램 변경 내역 안내 Microsoft Edge 브라우저가 바로가기 실행이 되지 않는 문제 수정 ACTS 5.23 다운로드 링크는 더 이상 제공 되지 않습니다. 이후 패치가 새롭게 나올경우 제공됨을 알려드립니다. ■ 프로그램 안내사항 Visual Studio 2019로 컴파일되었기에 Windows XP에 대한 지원은 불가능합니다.다운로드 후에 압축 해제시에 안티바이러스(백신)에 의해 파일이 없을 수 있습니다. 안티바이러스(백신)에서 압축해제 시 파일을 삭제하는 것으로 알고 있습니다. 해당 문제는 사용자의 컴퓨터상의 압축 프로그램 또는 안티바이러스(백신)의 문제입니다. ■ 기타 문의 사항은 https://blog.truds.kr 에 남겨주시기 바랍니다.이전 버전은 다운로드를 제공하고 있지 않음을 알려드립니다.다운로드 제공은 일정 시간 이후에 제공하지 않음을 알려드립니다. 2020.12.28 다운로드 링크 제거
Read More