[MySQL] Auto_Increment 값 재정렬 하기

Database
MySQL에서 데이터를 정리하다 보면 auto_increment 값의 충돌로 데이터가 입력이 되지 않는 경우가 있습니다.이럴 경우 간단히 해결할 수 있는 방법이 있는데요. auto_increment 값을 재지정해주면 쉽게 해결됩니다. 단순히 원하는 값으로 초기화하기를 원하는 경우 ALTER TABLE `table_name` AUTO_INCREMENT=XXXXXX(설정한 인덱스번호); 기존의 ROW들을 재정렬 및 셋팅하기를 원하는 경우 ALTER TABLE `table_name` AUTO_INCREMENT=1; SET @CNT = 0; UPDATE `table_name` SET `table_name`.`auto_colmn` = @CNT:=@CNT+1; 만약에 데이터가 있다면은 작동하지 않을수 있습니다. ALTER TABLE `table_name` DROP `auto_colmn`; ALTER TABLE `table_name` ADD `auto_colmn` INT( {many you want} ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (`auto_colmn`); 참조 : https://code.i-harness.com/ko/q/8827ea
Read More

[MySQL] Auto_Increment 한계

Database
[MySQL] Auto_Increment 한계 CREATE TABLE을 할때, TYPE다음에 나오는 괄호안 숫자가 BYTE를 나타낸다고 알고 있었는데요,실제로 데이터를 넣어보니 끝도 없이 들어가네요. 왜 이럴까 문서를 찾아보던중 잘 정리된 블로그가 있어서 원인은 잘 알게 되었지요^^ 참고 : http://blackbull.tistory.com/44 위 사이트를 읽어보면, 결국 괄호안 숫자와 상관없이 MySQL INT 최대값까지 발번이 될것으로 판단되네요.그렇다고 INT 최대값인 4,294,967,295까지 테스트를 해볼수도 없고, 그래서 다시한번 구글링을 해봤습니다. http://forums.devshed.com/mysql-help-4/auto-increment-what-happens-at-max-value-334661.html 요길 보니깐 사람들이 잘 정리해주셨네요^^int(11) auto increment으로 설정을 하게 되면, 최대 4,294,967,295까지 발번이 되고 이후에는 error가 난다고 하네요. 최대값이 얼마나 큰 숫자인지 계산을 한 글도 있는데요,10년동안(3650일) 발번을 한다고 볼때, 일별 1,176,703 rows가 발생해야 최대값을 초과할 수 있습니다. 따라서,Transaction이 엄청 빈번한 OLTP환경에서는 SRL타입을 int(11)로 설정하기보다는unsigned BIGINT로 설정하시는게 좀더 나을것으로 판단됩니다. unsigned BIGINT면 최대값이 18,446,744,073,709,551,615이므로 왠만해서는 최대값을 초과하지 않을것으로 사료됩니다. 물론 그게 아니라면 스키마 설계를 다시하심이 낫지 않을까 개인적으로 생각해봅니다.^^아님, 돈이 빵빵하시면 오라클을 써보심도…
Read More

[C#] HTML 에서 Text만 추출

CSharp
/// <summary> /// HTML 에서 Text만 추출한다. /// </summary> /// <param name="Html"></param> /// <returns></returns> public static string StripHtml(string Html) { string output = Html; output = System.Text.RegularExpressions.Regex.Replace(output, "<br>", Environment.NewLine); output = System.Text.RegularExpressions.Regex.Replace(output, "<br/>", Environment.NewLine); output = System.Text.RegularExpressions.Regex.Replace(output, "<br />", Environment.NewLine); //get rid of HTML tags output = System.Text.RegularExpressions.Regex.Replace(output, "<[^>]*>", string.Empty); //get rid of multiple blank lines output = System.Text.RegularExpressions.Regex.Replace(output, @"^\s*$\n", string.Empty, System.Text.RegularExpressions.RegexOptions.Multiline); output = System.Text.RegularExpressions.Regex.Replace(output, " ", " "); return output; }
Read More

ACTS 관련 안내

ACTS/SFCA
ACTS 관련 안내 ACTS 프로그램은 이곳에서 더 이상 배포하지 않고 내용도 작성하지 않습니다. 필요하신분은 아래의 주소로 이동하여서 자세한 정보를 획득 하시기 바랍니다. ACTS 관련 블로그 : http://truds.tistory.com 해당 관련 블로그이며, 최근 클라이언트 파일도 다운로드 가능합니다. 이전에는 주소를 자동이전으로 처리해 드렸지만 2018년 10월 1일부터는 자동으로 넘기지 않도록 처리하였습니다.
Read More

C# serial communication

CSharp
using System; //using OpenNETCF.IO.Ports; using System.IO.Ports; namespace ConsoleApp1 { class Program { static void Main(string[] args) { SerialPort port = new SerialPort("COM43", 115200, Parity.None, 8, StopBits.One); port.Open(); System.Threading.Thread.Sleep(1000); // waiting for Arduino reset for (int i = 0; i < 1000; i++) { Console.WriteLine(port.BytesToRead); // it write on the console only zeros, so no data is received System.Threading.Thread.Sleep(100); } port.Close(); } } }
Read More

[Ubuntu] 원격 IP로 MySQL(MariaDB)에 접속이 되지 않을 때의 해법

Database
원격 IP로 MySQL(MariaDB)에 접속이 되지 않을 때의 해법 ※ Ubuntu 16.04 MariaDb 10.0의 상황과 원격 IP의 주소가 111.222.33.44라고 가정한다. Java에서 다음과 같이 원격의 MySQL에 접속을 시도할때 String url = "jdbc:mysql://111.222.33.44:3306/나의DB명"; Connection refused 에러가 발생하거나 telnet을 이용해서 MySQL이 설치된 IP의 3306포트로 접속시 연결이 되지 않을 때의 해법이다. 네트워크의 연결 상태에따라 다양한 이유가 있을 수 있다. 예를들어 공유기 아래 서버가 물려있을 때 공유기에서 3306에 대한 포트 포워딩이 되어있지 않다면 아래의 방법이 통할수 없을 것이다. 다양한 원인들이 있으나 본 포스트는 3306 포트에 listening이 외부 IP로 설정되지 않고 127.0.0.1로 설정되어 있을 경우에 대한 해법이다. telnet을 이용해서 해당 IP로 3306포트로 접속이 되는지부터 확인해보자. 일단 Windows에서는 기본적으로 telnet을 사용할수 없는 상태로 설정되어 있다. 다음과 같이 하여 telnet을 사용할수 있도록 변경한다. 제어판 - 프로그램 제거 또는 변경 - Windows 기능 켜기/끄기 - 텔넷 클라이언트 체크 MS-DOS 창에서…
Read More

안내사항

일반
안내사항 안녕하세요? 해당 블로그를 방문해 주신분들에 모두 감사드립니다. 제개인적으로 블로그를 1개 운영하고 있습니다. 그곳을 제 나름대로 기술 블로그로 정하고 별 다른 말 없이 기술적인 이야기를 주로 적고 있습니다. 사적인 이야기를 적을곳을 필요하여서 이곳을 운영하게 되었습니다. 제 개인적인 사적인 이야기나 혹은 다른 블로그에서 작성후 보관을 주로 하기 위해서 이곳에 글을 남기게 될것 입니다. 이러한 글을 작성하게 되면은 해당 블로그의 주소를 남기도록 하겠습니다.
Read More
[Ubuntu] SSL 인증서 설치

[Ubuntu] SSL 인증서 설치

Linux
 SSL 발급 및 적용 방법 인증서 발급 프로그램을 서버에 설치해야한다. Let’s Encrypt 는 Ubuntu 16.04 LTS 에서 기본패키지로 추가되었다. 따라서 쉽게 설치할 수 있다. 반면 Ubuntu 14.04 LTS 에서는 기본패키지가 아니기 때문에 몇 줄 더 입력해야 한다. 발급, 설치, 적용 방법은 다음과 같다. 모든 단계는 Linux root 계정으로 진행한다. [code shell] # apt-get install letsencrypt # letsencrypt certonly --webroot --webroot-path=/home/myuser3/www -d myuser3.com -d www.myuser3.com [/code] * 명령어 설명 -d 는 도메인명을 지정하면 된다. 최대 100개의 도메인 이름을 지정할 수 있다. (한 인증서가 서로다른 100개의 도메인 인증을 할 수 있음) 일반적으로는 기본도메인과 www 도메인 두개를 지정한다. -webroot 는 웹인증을 받을 것이라는 것이다. 외부 인증프로그램이 -d 에 지정된 도메인 사이트에 접속한다. -webroot-path 는 웹루트의 경로이다. 보통 index 페이지가 위치하는 경로이다. 인증 프로그램이 이 경로에 임시 랜덤 파일을 생성하고, 외부 인증프로그램이 이 파일을…
Read More
[C#] dll을 포함한 단일 exe배포 방법

[C#] dll을 포함한 단일 exe배포 방법

CSharp
일반적으로 프로그램을 배포시 exe파일과 Application이 호출하는 dll파일은 동일한 폴더(또는 dll 파일이 System폴더에 위치)에 있어야 한다. Microsoft 공식 배포처에서는 exe와 호출하는 라이브러리를 병합하는 프로그램을 배포중이지만, 컴파일러단에서 자체 해결할 수 있는 방법도 존재한다. 사용하고자 하는 dll을 프로젝트에 참조해당 dll을 프로젝트 리소스에 추가리소스에 추가된 dll의 속성 -> 빌드작업 속성 값을 포함 리소스로 지정프로그램 진입점(Program.cs)에 코드를 아래와 같이 변경리소스에 dll 파일 포함하기dll 파일 => 속성 => 빌드작업 ++ 포함리소스로 변경 using System.Reflection; using System.IO; /// <summary> /// 해당 응용 프로그램의 주 진입점입니다. /// </summary> [STAThread] static void Main() { // 리소스 dll 취득 AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ResolveAssembly); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } // .NET 4.0 이상 static Assembly ResolveAssembly(object sender, ResolveEventArgs args) { Assembly thisAssembly = Assembly.GetExecutingAssembly(); var name = args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll"; var resources = thisAssembly.GetManifestResourceNames().Where(s => s.EndsWith(name)); if (resources.Count() > 0)…
Read More

[Ubuntu] APM 설치

Linux
]# sudo apt-get install php ]# sudo apt-get install apache2 ]# sudo apt-get install mariadb-server ]# sudo apt-get install libapache2-mod-php7.0 ]# sudo mysql > SET PASSWORD FOR root@localhost = PASSWORD('원하는 패스워드 입력'); > quit; ]# sudo /usr/bin/mysql_secure_installation /* 이미 암호는 앞에서 지정했기 때문에 첫 번째 패스워드를 변경하겠냐는 질문에는 n을 나머지는 (이 설정에 대해서 잘 모르는 분이라면) 엔터키를 끝날 때까지 눌러 주세요. */ ]# sudo mysql > USE mysql; > UPDATE user SET plugin='' WHERE user='root'; > FLUSH privileges; > quit; ]# sudo apt-get install php-mysql INSERT INTO mysql.user (host,user,password) VALUES ('%','root',password('CAFE8848')); GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'; FLUSH PRIVILEGES; ]# sudo vi /etc/php/7.0/apache2/php.ini ]# sudo vi /etc/php/7.0/cli/php.ini /*** default_charset="UTF-8" data.timezone=”Asia/Seoul” mbstring.language = Korean mbstring.internal_encoding = UTF-8 mbstring.http_input = UTF-8 mbstring.http_output = pass mbstring.encoding_translation = On mbstring.detected_order = UTF-8 mbstring.substitute_charcter…
Read More

[Linux] Crontab에 프로세스 정지와 실행을 등록

Linux
[Linux] Crontab에 프로세스 정지와 실행을 등록 #!/bin/sh count=0 cd /opt/monitoring for line in `ps -ef | grep "monitoring" | grep -v grep | awk '{ printf("%s\n", $2); }'` do if [ $line -ge 1 ]; then #echo $line #프로세스 죽이기는 아래것중 아무것나 사용하면 됩니다. #kill -TERM $line kill -9 $line fi #echo $count if [ $count -eq 0 ]; then rm -rf /opt/monitoring/*.out /usr/bin/nohup /opt/monitoring/device.php & #echo bakgroundstart count=$(($count+1)) fi done
Read More

쉘스크립트 비교연산자 활용

프로그램
쉘스크립트 비교연산자 활용 정수 비교 -eq     같음     if [ "$a" -eq "$b" ] -ne     같지 않음     if [ "$a" -ne "$b" ] -gt     더 큼     if ["$a" -gt "$b" ] -ge     더 크거나 같음     if [ "$a" -ge "$b" ] -lt     더 작음     if [ "$a" -lt "$b" ] -le     더 작거나 같음     if [ "$a" -le "$b" ] <     더 작음(이중 소괄호에서)     (("$a" < "$b")) <=     더 작거나 같음(이중 소괄호에서)     (("$a" <= "$b")) >     더 큼(이중 소괄호에서)     (("$a" > "$b")) >=     더 크거나 같음(이중 소괄호에서)     (("$a" >= "$b")) 문자열 비교 =     같음     if [ "$a" = "$b" ] ==     같음     if [ "$a" == "$b"…
Read More

리눅스 로그 파일 정리

Linux
일단 사이즈가 가장 큰 것부터 정리하는 것이 좋겠죠.. . 보통은 messages 파일을 정리하시면 좋습니다. 지우지는 마시고 다음과 같이 하세요. cat /dev/null > /var/log/messages.2 cat /dev/null > /var/log/messages.1 messages 파일도 열어서 오래된 내용들은 삭제하셔도 됩니다. dmesg는 부팅시 기록되는 정보들인데 특별한 경우를 제외하고는 별로 필요가 없습니다. cat /dev/null > dmesg cron은 주기적으로 실행시킨 명령들에 대한 정보인데 해킹을 당한 경우가 아니라면 별로 필요 없습니다. cat /dev/null > cron.3 cat /dev/null > cron.2 cat /dev/null > cron.1 vsftp.log는 ftp를 통해 주고 받은 파일들에 대한 정보, ftp 서버에 로그인했던 사용자에 대한 정보들이 있는데 역시 별로 필요없습니다. cat vsftp.log.1 cat vsftp.log.2 cat vsftp.log.3 maillog는 메일서버와 관련된 로그입니다. 필요없으시면 이 역시 마찬가지로 작업.. secure는 접속 기록과 su 명령과 관련된 기록입니다. 필요없으시면 이 역시 마찬가지로 작업.. 이 정도면 대충 정리될 것 같은데요.. 일단 사이즈가 가장 큰 것부터 정리하는…
Read More